2

誰かが私を正しい方向に向けてくれることを願っていました。問題を明確にするために、いくつかの手順で問題をリストしました。

  1. regsvr32を使用して C++ DLL を COM に登録します。
  2. 次に、C++ DLL の/primary属性を指定してtlbimpを使用して、C# で使用できるアセンブリ ファイルを作成します。
  3. 次に、新しく生成されたアセンブリを GAC に登録します。
  4. C++ タイプ ライブラリに GACed アセンブリへの参照が含まれるように、生成されたアセンブリで regasm を呼び出します。

問題は、regasm /uを使用すると、「正常に登録解除されました」と表示されることです。しかし、OLEVIEW を使用して COM で typelib をチェックすると、GACed アセンブリへの PrimaryInterop 参照がまだ表示されます。

regasm /u /tlb も使用してみましたが、次のような警告が表示されます。

RegAsm : warning RA0000 : Type library not un-registered since the assembly was
imported from COM

ここに画像の説明を入力

これは私を夢中にさせているので、助けてくれてありがとう;)

4

1 に答える 1

3

手順 4 は誤りです。COM サーバーは手順 1 で既に登録されています。Regasm.exe は、独自の COM サーバー ([ComVisible] 属性) を作成する場合にのみ使用し、単に使用する場合には使用しません。手順 2 で /primary を使用するのも難しいです。独自のパブリック インターフェイスにインポートした COM 型を公開する場合にのみ、PIA が必要です。避けるのが一番。手順 1 を繰り返して、与えた可能性のある損傷を修正します。

tlbimp.exe によって生成される相互運用アセンブリは、タイプ ライブラリから自動生成される宣言のみを含む小さなヘルパー アセンブリです。タイプ ライブラリを解析しなくても、CLR が COM インターフェイス メソッドのサンクを生成できるようにします。そのエディションをお持ちの場合は、VS2010 で利用可能な Embed Interop Types 機能を必ず使用してください。

于 2011-07-15T19:56:36.850 に答える