質問

C++プログラムで、.NET out-of-procサーバーのTLBを#importしようとしています。

次のようなエラーが発生します。

z:\server.tlh(111) :エラー C2146:構文エラー :ない ';'識別子の前に「getType」

z:\server.tlh(111) :エラー C2501:'_TypePtr' :ストレージクラスまたは型指定子がありません

z:\server.tli(74) :エラー C2143:構文エラー :ない ';' 「タグ:: ID」の前

z:\server.tli(74) :エラー C2433:'_TypePtr' :データ宣言では「inline」は許可されません

z:\server.tli(74) :エラー C2501:'_TypePtr' :ストレージクラスまたは型指定子がありません

z:\server.tli(74) :致命的なエラー C1004:予期しないファイルの終わりが見つかりました

TLH は次のようになります。

_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();

私は、GetType()、Equals() などの基本オブジェクトの .NET オブジェクト メソッドにはあまり興味がありません。しかし、GetType() が問題を引き起こしているようです。

一部の Google 調査によると、可能であることが示されています #import mscorlib.tlb (またはパスに入れます)が、それをコンパイルすることもできません。

任意のヒント?

役に立ちましたか?

解決 3

no_namespace と raw_interfaces_only を #import に追加しました。

#import "server.tlb" no_namespace named_guids

また、REGASM.EXE の代わりに TLBEXP.EXE を使用すると、この問題が解決されるようです。

他のヒント

#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.

さらに、VSがTLBにCOMソースを遵守した場合、次のようなヒントがあります。// #import "c: windows microsoft.net framework v2.0.50727 mscorlib.tlb" you shoud you stdafx.hに#inport youown.tlbを追加します。プロトタイプのプロジェクト

そうすれば問題は解決すると思います。

しかし、より大きな問題は次のとおりです。すべての作業が完了した後、プログラム内で Ptr を呼び出すと、いくつかのランタイム エラーが発生します。

誰か助けてもらえますか?

を使う必要があるようです

[ClassInterface(ClassInterfaceType.None)]

ここは 別の議論 同様の問題について。

また、C# クラスにこの属性がないことを確認してください。

[ClassInterface(ClassInterfaceType.AutoDual)] <-- _TypePtr を使用すると C++ でエラーが発生するようです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top