32位python-64位Python调用32位DLL方法(一)

摘要:

本文介绍了一种简单快捷的方法,实现在64位Python调用32位DLL.

引言:

Python发展到现在,3.x的普及率已经相当高,而且随着硬件(内存的不断增大)以及操作系统(64bit windows)的发展,64bit的3.x python 的占有率不断提高.但是随之带来的问题就是,长期积累下来的很多库文件由于各种各样的原因没有同步与时俱进,仍然停留在32bit 2.x时代.对于python版本的2/3之别,问题不大,方法很多,这也不是本文的关注对象,暂且不提.32bit到64bit的跨越就是一块硬骨头,如下图所示.显然,这个难点长期以来困扰大家,给大家带来极大不便,亟待解决.

664acf99310a

Paste_Image.png

通过网络搜索可知,目前没有靠谱的解决方案.普遍的看法是,这个问题没有直接方法能够解决,这基本上是个公认的结论.这是由于在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。Python解释器的常规实现CPython本身也是一个进程,如果它被编译64位程序,那么也就无法直接加载32位的dll了.那么只有通过非直接的方式,替代性的方案,主要是以下几种:

如果对dll的调用不频繁并且对于运行结果的处理要求比较简单,可以在系统中同时安装32位和64位的Python解释器。在运行于64位Python解释器的代码中,通过subprocess启动32位的Python解释器运行python代码加载32位的dll。 用32位py调用DLL,生成EXE,也可以,效果同上,但额外需要一个生成EXE的过程。

如果对dll的运行结果要求频繁快速的处理,那么可以使用进程间通信(RPC)。分别启动32位和64位的Python解释器,两者之间用RPC通信。简单的RPC用socket自己写就行,或者基于rpyc这种第三方python库,如果是企业级别的应用可以选择Thrift。这个方法的好处是,32位和64位的Python解释器可以分别部署在不同机器上。

如果对运行性能要求非常高,那么可以考虑用C语言写代码包装dll,创建COM服务器,将32位dll的接口函数封装为COM服务器的相关接口。在注册表中注册COM服务器。64位python用第三方python库comtypes来访问COM对象。这个只适用于Windows平台。

如果有对应dll的源码,那么可以重新配置成64位方式编译,获得64位的dll,就可以直接调用了。

方案4是最佳选择,但往往是最没可能实现的选择,原因很多,不予赘述.1,2,3的基础是Inter-process_communication.这种方式,一般来说,难度都比较高,对于python普通用户很有挑战性.那么有没有一种方案能够便捷的实现Inter-process_communication呢?下面所介绍方案,目前来看是最好的选择.

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值