引用COMVisible对象的现有实例

本文关键字:实例 COMVisible 对象 引用 | 更新日期: 2023-09-27 18:03:44

我有两个。net项目,我想在它们之间创建一个双向通信。ProjectA是一个共享外接程序,可以在MS Office应用程序中创建一个ribbon。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通信。

引用COMVisible对象的现有实例

您可能正在寻找:

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

从正在运行的对象表中获取一些东西