2

我有两项可以插入 excel 的技术。

一种是实现 IDTExtensibility2 接口的 COM 插件。另一个是通过 Excel-DNA 实现的 RTD 服务器。

这两个对象都是由 excel 实例化的。他们每个人都需要在运行时访问第三个对象以从中获取数据并将其推送到 excel。

因为我不能把这个对象交给 excel 插件,所以我把它做成了一个单例,希望它们每个都可以共享同一个实例。

不幸的是,在运行代码时,他们每个人都看不到另一个人创建的单例对象的实例。

如何让两个插件引用同一个对象?

让我们假设两个插件都需要保留,我宁愿不进行进程间通信设置。

TL/DR 两个 excel 插件需要共享第三个对象,但是将第三个对象设为单例不起作用,因为每个 excel 插件都看不到另一个插件创建的第三个对象的实例。

这种问题的解决方案是什么?

4

1 回答 1

1

您的加载项正在单独的 AppDomain 中加载。一种选择是将 COM 加载项集成到 Excel-DNA 加载项中。这可能很简单:

  1. 将您的 COM 插件代码添加到您的 Excel-DNA 项目中,
  2. 将您的加载项类更改为从ExcelComAddIn(而不是IDTExtensibility2)派生,
  3. 将该类加载到您的AutoOpenviaExcelComAddInHelper.LoadComAddIn(...)中。

否则,您将需要某种 AppDomain 间通信。您可以设置一个 Marshal-By-Reference 对象,将其设置为与加载的加载项对应Object的对象的属性COMAddIn,并使用 Excel-DNA 加载项中的 COM 接口检索该对象。

于 2013-03-09T12:38:41.130 回答