繁体   English   中英

使用excel插件防止单个对象的多个实例

[英]Preventing multiple instances of a singleton object with excel plugins

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

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

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

由于我无法将此对象交给excel插件,因此我将其设为单例,希望它们每个都可以共享同一实例。

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

如何获得两个加载项以引用同一对象?

让我们假设两个附加组件都需要保留,而我不想去进行进程间通信设置。

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

解决这个问题有什么办法?

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

  1. 将您的COM加载项代码添加到Excel-DNA项目中,
  2. 更改您的外接程序类以派生自ExcelComAddIn (而不是IDTExtensibility2 ),
  3. 通过ExcelComAddInHelper.LoadComAddIn(...)AutoOpen加载该类。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM