2011-07-15 11 views
2

私は誰かが正しい方向に私を指し示すことを望んでいました。うまくいけばこの問題を明らかにするために、問題をいくつかのステップでリストアップしました。REGASM/uを使用してCOM [PrimaryInteropAssemblyName] typelib値を削除することができません

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

問題は、私はます。regasm/Uを使用する場合、それは「成功した未登録」だったと言うことです。しかし、OLEVIEWを使用してCOMでtypelibをチェックすると、のようになります。は、GACedアセンブリへのPrimaryInterop参照を示しています。

私がします。regasm/U/TLB aswell使用して試してみましたが、私はこれと言って警告を受ける:このようどのような援助のための

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

Screen of the typelib in OLEVIEW

おかげで、私は狂気運転している;)

答えて

3

手順4が間違っている、COMサーバーが既に手順1で登録されています。を作成するときに、を作成したときにではなく、独自のCOMサーバー([ComVisible]属性) eです。手順2で/ primaryを使用する場合は、自分のパブリックインターフェイスでインポートしたCOMの種類を公開するときにだけPIAが必要です。最高の回避。手順1を繰り返します。

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

+0

これは今よりはるかに意味があります!私の混乱をクリアするためにあまりにもありがとう:) – silentfrost

関連する問題