3

多数の相互参照 COM ライブラリを持つ VS2010 プロジェクトを維持しています。VS2010 がインストールされているランダムなワークステーションからビルドできるようにプロジェクトを構成しようとしています。ワークステーションは 32 ビットと 64 ビットの両方である可能性があるため、プロジェクトを「出力を登録する」ように構成すると、64 ビット DLL を読み込んで DllRegisterServer を呼び出すことができないため、ビルドは 32 ビット マシンでビルドに失敗します。

次に例を示します。プロジェクト B の Typelib は、プロジェクト A の Typelib を参照します。プロジェクト C は、次のステートメントを介してプロジェクト B を参照します。

#import "B.tlb"

ライブラリ B は A を参照するため、B.tlb がインポートされると、コンパイラは A から型を読み込もうとします。したがって、A が登録されていない場合、コンパイルは次のように失敗します。

error C4772: #import referenced a type from a missing type library ...

OleView アプリケーションを使用して B.tlb を開こうとしましたが、regsvr32 を使用して登録されている場合、ライブラリ A 参照の正しいファイル名のみが表示されます。

だから、ここでの私の質問は次のとおりです。ライブラリ参照が適切に解決される別の方法はありますか? たとえば、ライブラリの TLB の名前を .tlb などに変更します。

4

3 に答える 3

2

最初に参照されたA.tlbをインポートするか、include()オプションを使用してB.tlbのインポートにリストします。

他の参照を不必要に持ち込むことを避けることができる場合にのみ、使用する予定のインターフェースの部分を#importしてください。

于 2010-09-22T21:14:09.063 に答える
1

最も簡単な方法は、使用時にすべての *.tlb ファイルを dir に配置することです。

プロジェクトの構成によって異なります。すべての *.tlb ファイルを次の場所にコピーします。

よろしく、 マリウス

于 2013-01-15T17:43:53.947 に答える