0

2つの.NETプロジェクトがあり、これらの間に双方向通信を作成したいと思います。ProjectAは、MSOfficeアプリケーションでリボンを作成する共有アドインです。ProjectBはWinFormsアプリであり、サーバーとの間で情報を収集/送信します。

IAddInCommunicationProjectBから呼び出したいメソッドを定義するインターフェースを作成しました。このインターフェイスは、別のクラスライブラリプロジェクトにあります。ConnectProjectAのクラスは、 IAddInCommunication(他のいくつかと一緒に)インターフェイスを実装します。ProjectBにもインターフェイスのDLLへの参照を追加しました。

たとえば、MSWordで実行されている共有アドインのメソッドを呼び出そうとしています。これを実現するために、次のコードを使用しています(ProjectB内)。

const string ProgId="ProjectA.Connect";
//...
Type officeAddInType = Type.GetTypeFromProgID(ProgId);           
object obj = Activator.CreateInstance(officeAddInType);
_remoteAddIn = (IAddInCommunication)obj;
_remoteAddIn.TestMethod("Hello");

問題は、が_remoteAddInOfficeで実行されているインスタンスを指していないことです。これは単なる新しいインスタンスです(予想どおり)。Shared-AddInの実際に実行されているインスタンスに接続するにはどうすればよいですか?

とにかくアプリケーションで必要だったので、SendMessageAPIを使用してProjectAからProjectBへの通信を解決しました。本当に良い方法がない場合にのみ、アドインにSendMessage通信を実装します。

4

1 に答える 1

1

あなたはおそらく探しています:

(IAddInCommunication)System.Runtime.InteropServices.Marshal.GetActiveObject(Pro‌​gId);

実行中のオブジェクトテーブルから何かを取得するため。

于 2013-03-13T12:59:59.460 に答える