2

2 つの .exe アプリケーションがあります。それぞれに、自動化と互換性のあるインターフェイスが含まれており、プロジェクト IDL で説明されています。したがって、両方のアプリケーションに tlb があります。別の/別のアプリケーションで実行されているコードからインターフェイスの 1 つを実装するクラスの呼び出しメソッドを整理する必要があります。COM サーバーと COM クライアントでどのように動作するかによって、プロセス外の境界がスローされます。ただし、インターフェイスはプライバシーであり、レジストリに登録されていないため、標準の CoMarshalInterface/CoUnmarshalInterface は機能しません。どうすればマーシャリングを手動で整理できますか (必要なデータはすべて存在します: tlb、自動化互換インターフェイス)。

PSこのように見えますが、レジストリ登録はありません。

4

2 に答える 2

3

タイプ ライブラリが利用可能で登録されていると、COM がタイプ ライブラリ情報を使用してプロキシ/スタブのペアを自動的に作成することを期待できます。IMarshalただし、これが唯一の方法ではありません。COM は、インターフェイス、IMarshal::MarshalInterfaceメソッドを介して、オブジェクト自体をストリームにマーシャリングできるかどうかを最初にクエリします。

MSDN書き込みのマーシャリングの詳細:

カスタム マーシャリングは、それを実装するオブジェクトに固有のものです。オブジェクトによって実装され、実行時に要求に応じてシステムに提供されるプロキシを使用します。カスタム マーシャリングを実装するオブジェクトは IMarshal インターフェイスを実装する必要がありますが、標準のマーシャリングをサポートするオブジェクトは実装しません。

この方法でカスタム マーシャリングを実装することにより、COM オブジェクトはその重要な情報をストリームに保存CLSIDし、反対側でインターフェイスを再作成するためのアンマーシャラーを提供します。データはプロセス境界を越えて渡され、オブジェクトがインスタンス化され、問題のインターフェイスを再作成するためにこのストリーム データが提供されます。

したがって、実装IMarshalして友達とすれば、タイプ ライブラリを登録したり、利用したりすることなく、COM 処理に統合することができます。

于 2012-10-11T15:57:40.993 に答える
0

COM オブジェクトを含む 2 つのプロセスを通信するには、ROT (Running object table) を使用できます。これを行う方法を示すサンプルを次に示します。

于 2012-10-11T18:17:13.190 に答える