64位程序调用32位DLL

        最近再把原来写的股票分析程序转换成64位版本,程序中调用了银江的通视数据接口dll,因为银江提供的dll是32位的,但windows下面64位程序并不能直接调用32位的dll,所以只能百度了.
        网上有说用进程外com的方式可以,之前从没接触过com,硬着头皮搞了半天,发现了问题,进程外com对于dll提供函数返回值不涉及指针的话没有任何问题,但是如果dll函数返回值是一个指针,问题就来了,由于这个指针和我自己的数据接收程序不在同一个进程地址空间,所以根本没有办法通过指针得到正确的接收数据.所以只能放弃这个方法,转向如何在进程间传递数据.
        我自己程序是用QT编写,mingw编译的,网上关于进程间通信(IPC)资料一大把,看了一下基本上QT在windows下面如果想在进程间传递大数据,只能用LocalSocket或者共享内存的方式.两种方式的基本思路差不多,我自己的接收程序是64位的,另外在写一个32位的server程序,负责调用银江的数据接口dll,server程序接收到数据以后,以上面两种方式传递给我64位的接收程序就可以了. 
        首先以LocalSocket的方式来设计接口的,因为共享内存方式会设计比较麻烦的进程间同步问题,localsocket本身就有一条同步信号机制可供使用,具体涉及使用QT的QLocalSocket,QLocalServer类,网上资料很多,不赘述.既然是首先提这种方式,肯定是因为最终没选他,理由是,localsocket会把我传的整块数据随即分割,需要我在接收端判断并重新合成原始完整块数据.这就要求接收端多余的判断操作,和内存创建销毁操作,最终还是放弃了.当然我并没有太深入的去学习localsocket这种方式有没有办法不自动分割发送的完整大块数据,如果有的话,这应该是一种理想的方式.
        下面就要讲讲我最终采用的共享内存方式了,主要涉及QT的QSharedPointer类,开3个共享内存;
        第1个用来存储接收到的数据块.
        第2个用来放接收端(64位)的winid,主要是提供给发送32位的dll调用端读取,在接收到数据后通知64位的接收端有新的数据需要从共享内存中读取;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值