3

COM アセンブリ (dll) を参照として追加して Visual Studio プロジェクトにインポートすると、生成された同等の共通言語ランタイム アセンブリを問題なく使用できます。

ただし、tlbimp を使用して同じ COM アセンブリを共通言語ランタイム アセンブリに変換しようとすると、さまざまな問題が発生します。

Visual Studio が tlbimp で使用する設定を複製する方法はありますか? または別の言い方をすれば、tlbimp を使用して Visual Studio と同じ相互運用クラスを生成する方法はありますか?

4

2 に答える 2

2

私は自分で解決策を見つけました。Visual Studio が tlbimp で使用する設定を複製するには、/out フラグと /namespace フラグを使用するだけです。

out フラグは、「Interop」というプレフィックスとして使用されます。名前空間フラグを使用して、既定の名前空間を COM アセンブリの名前に設定します。

例えば

tlbimp /out:Interop.MyCom.dll /namespace:MyCom MyCom.dll
于 2009-04-05T10:37:08.157 に答える
2

/sysarray オプションも使用する必要があります。そうしないと、メモリの破損を示す想定される EngineExceptions でアプリがランダムにクラッシュすることがわかります。

これにより、Visual Studio によって生成されたものと同じ ilcode が得られます。

/namespace パラメーターを指定して、tlb ファイルのライブラリ句と一致するようにします (大文字と小文字の区別を含む)。(oleview.exe を使用して tlbs を直接表示できます)。

[残りのブレイン ダンプ] 特に msbuild スクリプトから tlbimp を使用する利点は、64 ビットと 32 ビットの両方のターゲットに対して製品を適切にビルドできることです。

そうしないと、最後に regsvr32 された tlbs を使用して 64 ビット ビルド ターゲットになってしまいます。これは、32 ビット インターフェイスを備えた 32 ビット com オブジェクトである可能性が最も高いです。

64 ビットと 32 ビットを実行している場合は、/reference と /tlbreference の両方を使用して、コマンド ラインで渡す相互運用機能と tlb を使用するようにします。

于 2010-04-28T05:41:05.990 に答える