OPCDA 32位的时候回调能上来,64位的回调上不来

最近有一个项目,要用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位一定要注意指针的长度问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
由于从 32 位到 64 位的转换涉及到平台和数据模型的变化,因此在将 32 位 OPC DA 客户端代码转换为 64 位时,可能会面临一些挑战。这些挑战可能涉及指针和数据类型的大小、对齐方式、函数调用约定等方面的变化。 下面是一些可能导致读取数据失败的常见问题和解决方法: 1. 数据类型的大小和对齐方式:在 64 位系统上,一些数据类型的大小和对齐方式可能与 32 位系统上不同。确保你的代码正确处理这些差异,并使用正确的数据类型。 2. 指针的大小和转换:指针在 32 位和 64 位系统上的大小不同。如果你在代码中进行了指针转换或使用了特定于 32 位的指针操作,需要相应地进行修改。 3. COM 接口和调用约定:COM 接口在 32 位和 64 位系统上的调用约定可能有所不同。确保你的代码正确处理 COM 接口的调用约定,并使用正确的函数签名。 4. OPC DA 版本兼容性:在迁移到 64 位系统时,还需要确保 OPC DA 客户端与目标服务器的版本兼容。某些旧版本的 OPC DA 服务器可能不支持 64 位客户端。 5. 编译器选项和设置:在编译 64 位代码时,确保使用正确的编译器选项和设置。这可能涉及修改编译器的目标平台、运行时库等设置。 除了以上提到的问题,还可能存在其他与特定代码和环境相关的问题。如果你遇到了读取数据失败的问题,建议你仔细检查代码、调试输出和错误信息,以找出具体的问题所在,并针对性地解决它们。 另外,如果你在转换过程中遇到了困难或具体的问题,可以提供更多细节,以便我能够给出更具体的帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值