4

C++ プログラムで、.NET アウト オブ プロセス サーバーの TLB を #import しようとしています。

次のようなエラーが表示されます。

z:\server.tlh(111): エラー C2146: 構文エラー: ';' がありません 識別子「GetType」の前

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

z:\server.tli(74): エラー C2143: 構文エラー: ';' がありません 「tag::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(またはパスに入れる)ことが示されていますが、それをコンパイルすることもできません。

任意のヒント?

4

5 に答える 5

3
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"

私にとっての解決策でした。

于 2010-04-28T17:17:27.517 に答える
1

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

#import "server.tlb" no_namespace named_guids

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

于 2008-08-15T21:06:51.660 に答える
1

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

[ClassInterface(ClassInterfaceType.None)]

これは、同様の問題に関する別の議論です。

于 2010-01-15T13:36:14.040 に答える
1

多くの場合、MSVC が COM ソースを にコンパイルするとTLB、次のようなヒントが残されます。

#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb"

stdafx.hそれを行の前に追加する必要があります

#import "your_own.tlb"

その後、生成されたプロトタイプ用に、 などの基本型が_Typeプロジェクト_ObjRefに追加されます。

問題が解決することを願っています。

しかし、より大きな問題は、すべてが完了した後、プログラムで Ptr を呼び出すときにランタイム エラーが発生する可能性があることです。

誰でも助けることができますか?

于 2009-04-17T03:41:16.187 に答える
0

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

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

于 2008-08-20T17:08:27.310 に答える