2012-03-19 78 views
1

問題是,我有一個DLL和TLB,我在C#.NET中創建,使它COM可見,並希望將函數公開給我的MFC C++項目 - 我做一個測試類首先它工作正常,並沒有從C++生成的tlh中得到任何錯誤。現在實際的DLL我想用的是給我下面的編譯錯誤:VC++ 6.0生成.TLH COM DLL導致錯誤

error C2059: syntax error : '<' 
error C2238: unexpected token(s) preceding ';' 
error C2059: syntax error : '<' 
error C2238: unexpected token(s) preceding ';' 
error C2059: syntax error : '<' 
error C2238: unexpected token(s) preceding ';' 

從++生成TLH文件中的以下C:

// 
// Type library items 
// 

struct __declspec(uuid("d6b19eb0-56bf-3c30-9f3a-ebafca303996")) 
Class1; 
// [ default ] interface _Class1 
// interface _Object 

struct __declspec(uuid("a7e7ae20-5fb3-3c3f-a9fb-1fac0128dea1")) 
IProtracReader : IDispatch 
{} 

struct TagReadEvent 
{ 
__int64 <Index>k__BackingField;  <<< These three lines are where the errors are. 
__int64 <TagID>k__BackingField; 
DATE <EventMoment>k__BackingField; 
}; 

有誰知道爲什麼編譯器生成此文件那給我的錯誤?任何幫助是極大的讚賞!

回答

2

這些是您在使用自動屬性時由C#編譯器生成的字段。像:

[ComVisible(true)] 
public class TagReadEvent { 
    public long Index { get; set; } 
    // etc... 
} 

你應該回去修復C#代碼。還使用接口並將類/結構保留爲[ClassInterface(ClassInterfaceType.None)],以便公開任何實現。 COM方式。如果您不能,則可以使用#import指令中的排除屬性跳過麻煩製造者。像:

#import "something.dll" exclude("TagReadEvent") 

重命名屬性可以解決這個問題了。