簡體   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