2

他のユーザーが使用できるように、C# dll に COM インターフェイスを実装しようとしています。foo.idl でインターフェースを定義しました。

tlbimp を介して foo.idl を実行し、.Net アセンブリである foo.dll を生成しました。インターフェイスを実装するために、dll で foo.dll を参照してインターフェイスを実装できます。

これは、1 つの例外を除いて、現状のままで完全に機能します。1 つではなく 2 つの dll を配布する必要があります。これは、実際に私が取り組んでいるプロジェクトの要件に反します: 1 つの DLL を提供します。

tlbimp dll を私のものにマージする方法、またはこれを行う他の方法 (2 番目の dll を使用せずに C# で COM インターフェイスを実装する) はありますか?

4

2 に答える 2

3

Reflector のように、優れた逆アセンブラーが仕事を成し遂げます。相互運用アセンブリを逆アセンブルし、生成された C# インターフェイス宣言をソース コードにコピーするだけです。もちろん、これはインターフェイス宣言と IID が安定している場合にのみ行う必要があります。

VS2010 へのアップグレードを検討してください。その「相互運用タイプの埋め込み」機能を使用すると、相互運用アセンブリなしでアセンブリを出荷できます。

于 2012-05-01T02:11:43.453 に答える
1

「接着剤」dll の代わりに .tlb を使用することで、ごまかすことができます。

MSVC++/CLR を使用して混合モード アセンブリを作成することをお勧めします。

これには、同じアセンブリで C# を使用できないという欠点がある場合があります。ミックスに C# コードを追加したい場合は、以下を使用して困難な状況から抜け出すことができる場合があります。

他の、おそらく興味深い考えについては、私の以前の回答を参照してください。

于 2012-05-01T01:29:01.920 に答える