我有一个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,新的更新准备好了。这里的一篇文章建议对进程外的rtdserver采取类似的行为。我的实现是一个线程,进程中的RTDServer。
我希望能够跨多个实例使用相同的服务器Acme.RtdServer
。这肯定是可能的,因为彭博Excel API似乎实现了这一点。有人知道这是如何实现的吗?
EDIT:对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 + "]";
}
}
谢谢
[似乎无法添加任何评论]。当我试的时候,它说"还有11个……"版本为2010,32位