gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:04 26 4
gpt4 key购买 nike

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

一个是实现 IDTExtensibility2 接口(interface)的 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 对象,该对象设置为与加载的加载项相对应的 COMAddIn 对象的 Object 属性,并使用 COM 检索该对象来自 Excel-DNA 插件的界面。

关于c# - 使用 excel 插件防止单个对象的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15297942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com