2013-03-05 64 views
0

我有一个C#RTDServer,在excel的一个实例中运行良好。它被定义为如下:是否有可能在多个excel实例中使用相同的RTDServer

[Guid("1D50EF28-A1BE-4BE9-9214-46A48085ADFF")] 
[ProgId("Acme.RtdServer")] 
public class RTDServer : IRtdServer 
{ 
    // IRtdServer members: 
    // ... 
} 

当服务器“连接” Excel调用

#region IRtdServer Members  
public int ServerStart(IRTDUpdateEvent CallbackObject) 
{ 
    _callback = CallbackObject; 
} 

与随后可以用于通知的excel更新可被收集的回调对象:

_callback.UpdateNotify(); 

的问题是,如果我有第二次,Excel中的第三等情况下,ServerStart不会被调用,这意味着我不能通知Excel的新的更新已准备就绪。 MS KB文章here为进程外RTDServers提出了类似的行为。 我的实现是一个线程化的进程中的RTDServer。

我希望能够跨多个实例使用相同的服务器Acme.RtdServer。由于彭博Excel API似乎可以实现这一点,因此这一定是可能的。有谁知道这是如何实现的?

编辑:到RTD()调用封装在一个UDF:

public object ACME_UDF(string ItemID, string TopicName, bool OtherData = false) 
{ 
    if (string.IsNullOrEmpty(ItemID) || string.IsNullOrEmpty(TopicName)) 
    return "..."; 

    try 
    { 
     return _xlApp.WorksheetFunction.RTD("acme.rtdserver", null, ItemID, TopicName, OtherData); 
    } 
    catch (Exception) 
    { 
     return "Failed to retrieve [" + ItemID + "] with [" + TopicName + "]"; 
    } 
} 

感谢

+0

在加载InProc COM服务器时进程之间应该没有干扰。你确定你有不同的Excel实例(任务管理器中的不同进程),而不仅仅是同一进程的不同窗口吗? – Govert 2013-03-05 12:26:07

+0

是的,我可以在进程资源管理器中看到。我无法弄清楚附加过程似乎知道ServerStart(...)已被第一个调用。 – 2013-03-05 15:32:32

+0

难道这与注册的GUID和Excel的其他实例知道这一点有关吗? – 2013-03-05 15:41:22

回答

0

[好像不能添加任何评论。当我尝试它说“还有11个去...”]版本是2010,32位

相关问题