最近有一个项目,要用OPCDA来采RSlinx的数据,刚开始是用的32位的程序,采用的是OPCDA的订阅模式,但是运行了一段时间之后,发现数据量大的时候32位程序的内存不够用,便计划把OPCDA的程序升级到64位。
升级64位总共遇见了两个困难。
1.在获取CLISD的时候获取不到,经过一系列资料搜索,发现需要安装64位OPCDA组件。
也就是这个OPC Core Components Redistributable (x64) 3.00.107.msi,使用低版本的也行。
2.在获取到CLISD并且连接OPCDA服务器成功之后,发现数据的回调上不来,调用OnDataChange()无法调用,查了一遍之后,发现我在添加项的时候直接用了指针作为OPCHANDLE,但是OPCHANDLE是个DWORD,而64位程序中指针的长度是八个字节,这样转换之后,指针的高八位就丢了。我在OnDataChange()又使用了丢过之后的指针进行了强制的指针转换,直接就卡死在那里了。所以32位升级到64位一定要注意指针的长度问题。