【发布时间】:2021-03-04 22:32:02
【问题描述】:
我正在尝试编写一个简单的 RTD 客户端来开始一些事情,但我似乎无法建立初始连接。我在网上找到了一些例子,最好的似乎是this RTD client in C# gist。
在 MS-Excel 上有这个:=RTD("rtdtrading.rtdserver",, "WINZ20_F_0", "HOR") - 公式适用于 Excel 并提取新数据。
在上述要点的代码中,然后我尝试使用以下方法实例化对象:
var handler = new RtdClient("rtdtrading.rtdserver");
到目前为止,一切都很好。但是,当我尝试
var valList = handler.GetValue(new object[] { "WINZ20_G_0", "HOR" });
我收到了来自IRtdServer.ConnectData(Int32 topicId, Object[]& parameters, Boolean& newValue)、line 24 in the code above 的重大灾难性故障 (0x8000FFFF (E_UNEXPECTED))。
如果我尝试使用new string[] { "WINZ20_G_0", "HOR" });,那么错误更改为Specified array is not of the expected type,发生的更深一些,但我相信在ConnectData()实际运行之前,正如调用堆栈所建议的那样:
at System.StubHelpers.MngdSafeArrayMarshaler.ConvertSpaceToNative(IntPtr pMarshalState, Object& pManagedHome, IntPtr pNativeHome)
at ProfitRTDAnalyzer.Program.IRtdServer.ConnectData(Int32 topicId, Object[]& parameters, Boolean& newValue)
我似乎无法正确确定如何处理此问题。将object[] 引用更改为string[],它们与这些参数相关(主题列表),也没有帮助(仍然 _array 不是预期的类型)。
根据MS documentation, ConnectData() receives as second parameter a single-dimensional array of strings,所以不知道这里出了什么问题。
【问题讨论】: