1

REGASM を使用して COM に公開する 2 つの .net dll があります。COM クライアント内での参照を簡素化するために、これらを 1 つのファイルにしたいと考えています。

両方のファイルを IDL に変換してから、一方のライブラリ セクションの内容を他方にコピーしてから、MIDL を使用して .tlb にコンパイルし直しました。これは 2 番目の IDL 内の TypeDefs では正常に機能しますが、コピーしたインターフェイスに関しては失敗するようです。コピペしました。

これに多くの時間を費やす前に、この方法で IDL を貧弱にすることが実際に可能であることを確認したかったのです。

4

3 に答える 3

1

これが失敗する明らかな方法はわかりません。ライブラリセクションをマージしたとのことですが、他の.idlからインターフェイス宣言をコピーして貼り付けたとは言いませんでした。それは明白ですが、ありそうもない説明です。

失敗モードの1つは、クライアントアプリがタイプライブラリを使用して、アパートの境界を越えて、またはプロセス外でインターフェイスポインターをマーシャリングする場合です。ただし、これにはHKCR\Interfacesのレジストリキーが必要です。.NETはそれらを作成しません、あなたはそれをあなた自身でしなければならないでしょう。あなたがそうしたかどうかはあなたが知っているでしょう、説明もあまりありません。

于 2010-08-09T12:07:44.383 に答える
1

最初にILMergeを使用して .NET アセンブリを結合し、次に結果のアセンブリで REGASM を使用できますか?

ILMerge は、複数の .NET アセンブリを単一の .NET アセンブリにマージするためのユーティリティです。実行可能ファイルと DLL で同様に機能し、出力の処理と形式を制御するためのいくつかのオプションが付属しています。

于 2010-08-09T10:59:12.837 に答える
0

わかりましたので、私が経験していた問題は、idl のマージに関連していないことがわかりました。

idl にマージしたい場合は、1 つの idl のライブラリ セクションの内容を別の idl にコピーするだけで実行できます。次に、マージされたファイルに対して midl を実行して、tlb に変換します。

于 2010-08-12T08:46:14.260 に答える