2

次のコマンドを使用して DLL を登録しようとしています。

C:\Windows\Microsoft.NET\Framework64\v2.0.50727>RegAsm.exe /tlb d:\Certificate\d
igicorp\certificate.dll

私はx64機械を使っています。タイプ ライブラリ ファイルの下に登録されます。

のスクリーンショットOLE/COM Object Viewer:

ここに画像の説明を入力

dll ファイルと同じ属性を指す dll 登録を以下のようにしたいと考えています。

ここに画像の説明を入力

4

1 に答える 1

1

実際、アンマネージ COM サーバーには、多くの場合、タイプ ライブラリがアンマネージ リソースとして埋め込まれています。ビルド チェーンは、タイプ ライブラリを生成するために midl.exe ツールによってコンパイルされた、COM インターフェイスとコクラスを記述する IDL ファイルから始まります。次に、rc.exe リソース コンパイラは、TYPELIB のエントリを含む .rc リソース スクリプトを .res ファイルにコンパイルします。次に、リンカーはそれを DLL に埋め込みます。

これは通常、[ComVisible] .NET コードから作成された COM サーバーに対して行われる方法ではなく、同じ方法で構築されていません。非常に問題のある部分は、DLL がビルドされるまでタイプ ライブラリを取得できないことです。これは鶏が先か卵が先かの問題です。

不可能ではありません。確実に rc.exe を実行し、/win32res コンパイラ オプションで埋め込まれた .res ファイルを取得できます。プロジェクト + プロパティ、[アプリケーション] タブ、[リソース ファイル] ラジオ ボタンから IDE にも表示されます。ただし、ビルドシステムからはまったく助けが得られません。基本的に、2 つの別々の手順で DLL をビルドする必要があります。最初にタイプ ライブラリを作成し、もう一度それを埋め込みます。リソース スクリプトの記述方法を知っていて、Windows SDK コマンド ライン ツールの実行に慣れていて、DLL を非常に安定した状態にして、繰り返し実行する必要がない場合にのみ、これを熟考してください。この回答で rc.exe の実行について詳しく説明します。

于 2013-08-27T15:20:31.210 に答える