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