13.4 C#版对接原理

13.4 C#版对接原理

使用.NET版的好处就是省事,这么多款.NET版,选一款能对接MATLAB、使用简单、用户量大、有持续升级和维护、自己能理解的代码库即可。

如何判断是否能对接MATLAB?一般异步通知有两种方式:一种是偏底层的函数回调;另一种是偏高层的事件通知。

(I) 函数回调。C#版接口不用修改,直接用P/Invoke 的方式将函数句柄通过赋值的方式传给最底层的C接口。可惜实际测试行不通,表面上运行正常,能输出行情数据,但过不了十几秒MATLAB就闪退。推断原因是回调函数被MATLAB清理回收了,C层记录的函数据指针在运行十几秒后就成野指针了。

(2) 事件通知。此方式也有必须注意的地方。MATLAB支持addlistener,但直接模仿上面的回调函数的参数接口进行调用会报错,以下地址中的文档说明了为何会报错:http://cn.mathworks.com/help/matlab/matlab_extemal/lirnitations-to-support-of-net-events.htrmI。事件所使用的委托签名必须使用指定的格式:两个参数,第- 个参数是objectsender ,而第二个参数必须继承于.NET的EventArgs类。检查这些C#版的接口,只要是指定格式的委托签名就可以。