2012-03-19 10 views
1

問題は、私はC#.NETで作成したDLLとTLBを持っていて、COMを表示し、MFC C++プロジェクトに関数を公開したいと思ったまずテストクラスを作成し、正しく動作し、C++の生成されたtlhから何のエラーも得られませんでした。今、私が使用したい実際のDLLは私に次のコンパイルエラーを与えている:VC++ 6.0 COM DLLから生成された.TLHがエラーになる

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 ';' 

次のC++からTLHファイル生成:コンパイラは与えthatsのこのファイルを生成している理由

// 
// 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#コンパイラによって生成されるフィールドです。 Like:

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

戻ってC#コードを修正する必要があります。また、インターフェイスを使用し、[ClassInterface(ClassInterfaceType.None)]としてクラス/構造体を保持して、実装が公開されないようにします。 COMの方法。あなたができない場合は、#importディレクティブの属性を除外して、トラブルメーカーをスキップすることができます。同様に:

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

改名属性は、あまりにもそれを修正することができます。

関連する問題