我有一个在一个 excel 实例中运行良好的 C# 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 知识库文章建议了进程外 RTDServer 的类似行为。我的实现是一个线程化的进程内 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 + "]";
}
}
谢谢