是否可以在多个excel实例中使用相同的RTDServer

时间:2013-03-05 09:54:15

标签: excel c#-4.0 real-time com-interop rtd

我有一个C#RTDServer在excel的一个实例中运行良好。它的定义如下:

[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。它必须是可能的,因为Bloomberg 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 + "]";
    }
}

感谢

1 个答案:

答案 0 :(得分:0)

[似乎无法添加任何评论。当我尝试它时说“还有11个......”]版本是2010年,32位