引用COMVisible对象的现有实例

时间:2013-03-12 15:22:07

标签: c# com interop add-in shared-addin

我有两个.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通信。

1 个答案:

答案 0 :(得分:1)

您可能正在寻找:

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

从运行对象表中获取内容。