COM (CCW) を介してネイティブ C++ 内で .NET アセンブリ DLL を使用しています。新しいバージョンの DLL を作成するたびに、2 つのファイル (.dll と対応する .tlb) をコードで使用しているクルーに送信する必要があります。
.tlb ファイルをリソースとして .NET DLL ファイルに埋め込むことはできますか?
Visual Studio .NET でこれを行うのは簡単ではありませんが、可能です。基本的なレベルでは、次のことを行う必要があります。
「YourLibrary.tlb」などの TLB ファイルを生成します。
テキスト エディター (メモ帳、または Visual Studio の File/New/File.../Text File など) を使用して、"YourLibrary.rc" などの名前の Win32 リソース スクリプト ファイルを作成します。
スクリプト ファイルに、次のテキストをそのまま入力します (もちろん、実際の TLB ファイル名に置き換えてください)。
1 タイプライブラリ「YourLibrary.tlb」
スクリプト ファイルを TLB ファイルと同じフォルダーに保存します。
Visual Studio コマンド プロンプトから、スクリプト ファイルのあるフォルダーに移動し、次のコマンドを使用してコンパイルします。
rc YourLibrary.rc
これにより、「YourLibrary.res」という名前の同じフォルダーに Win32 リソース ファイルが生成されます。
Visual Studio のソリューション エクスプローラーでプロジェクト ノード (「YourLibrary」など) を右クリックし、[プロパティ] を選択します。
[アプリケーション] タブの [リソース] で、[リソース ファイル] オプションを選択し、手順 5 の [YourLibrary.res] ファイルを参照します。
プロジェクトを保存して再構築します。
TLB は、他の COM アプリケーションが読み取れるように、DLL にリソースとして埋め込まれます。
後で TLB ファイルを再生成する場合は、手順 5 を繰り返してリソース ファイルを再コンパイルし、手順 8 を繰り返して新しいバージョンを DLL に埋め込む必要があります。
とは言っても、ビルド イベントを使用するか、カスタム MSBuild ターゲットをプロジェクト ファイルに入れることで、これらの一部を自動化できるかもしれませんが、それはまったく別の議論です。