我有两个 .NET 项目,我想在这些项目之间创建双向通信。ProjectA 是一个共享加载项,可在 MS Office 应用程序中创建功能区。ProjectB 是一个 WinForms 应用程序,它从/向服务器收集/发送信息。
我创建了一个接口,IAddInCommunication
它定义了我想从 ProjectB 调用的方法。这个接口在一个单独的类库项目中。ProjectA 中的Connect
类实现了IAddInCommunication
接口(以及其他一些接口)。我还在 ProjectB 中添加了对接口 DLL 的引用。
例如,现在我正在尝试调用在 MS Word 中运行的共享加载项的方法。为此,我使用以下代码(在 ProjectB 中):
const string ProgId="ProjectA.Connect";
//...
Type officeAddInType = Type.GetTypeFromProgID(ProgId);
object obj = Activator.CreateInstance(officeAddInType);
_remoteAddIn = (IAddInCommunication)obj;
_remoteAddIn.TestMethod("Hello");
问题是,_remoteAddIn
没有指向在 Office 中运行的实例。这只是一个新实例(正如人们所期望的那样)。如何连接到 Shared-AddIn 的实际运行实例?
我使用 SendMessage API 解决了从 ProjectA 到 ProjectB 的通信,因为无论如何我的应用程序中都需要它。如果真的没有更好的方法,我只会在我的加载项中实现 SendMessage 通信。