摘要:

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

引言:

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

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呢?下面所介绍方案,目前来看是最好的选择.

32位python-64位Python调用32位DLL方法(一)相关推荐

  1. python suds_python使用suds调用webservice接口的方法

    最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库来实现了 1.安装suds mac: sudo pip in ...

  2. 自学Python 64 使用Python语言收发电子邮件

    Python 使用Python语言收发电子邮件 文章目录 Python 使用Python语言收发电子邮件 一.开发POP3邮件程序 1.类 2.方法 二.开发SMTP邮件程序   自从互联网诞生那一刻 ...

  3. 一位面试者提到直接调用vuex中mutations方法

    简述是用this.$store.mutations.xxx(xx)方式调用,因从未见过此种调用方式,回来就搜索了一下,查询结果如下 首先前文: 获取 state 的方式有两种,分别是 this.$st ...

  4. Python学习笔记——模块调用与字符串拼接方法

    文章目录 一.调用模块 1.import 模块名 2.调用模块里的函数 3.time模块与random模块 sleep()函数 random.randint() 二.不同数据类型的拼接 1.格式符% ...

  5. 32位和64位操作系统及软件的区别

    下面,我用最简洁的文字尽可能作最详尽的回答:两者之间存在的"五大不同".与此同时,着重说明Microsoft Windows64位(x64)操作系统,相对于32位(x86)操作系统 ...

  6. C++_32位和64程序

    catalog 32位和64程序的区别 32位和64程序的区别 我们这里说( 32位, 还是64位), 说的是: (这个exe文件), 而不是(电脑)!!! 编译器, 可以生成 (32位的程序), 也 ...

  7. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别

    基本上判断python对象是否为可调用的函数,有三种方法: 1.使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定 ...

  8. 如何确定我的Python Shell是在OS X上以32位还是64位模式执行?

    我需要一种方法,从外壳程序中告诉外壳程序处于哪种模式. 我尝试查看平台模块,但似乎只告诉您"有关可执行程序所使用的位架构和链接格式"的信息:尽管二进制文件编译为64位(我在OS X ...

  9. python 32位和64位共存以实现打包32位exe和64位exe

    一.简介 完成pkg封包源码后,百度得到python py格式源码打包成exe 文件的方法 1.打包exe文件方法 在这之前,仅仅只是安装了python,并未安装其他相关工具. 首先,安装 pyins ...

最新文章

  1. 是时候转型 Serverless 来玩微服务了吗?
  2. spring mvc之HandlerMapping
  3. 133.保护频带 134.流量控制在哪些层实现
  4. win10下docker如何安装?
  5. 【深度学习】词的向量化表示
  6. html5 css3浏览器,五大主流浏览器CSS3和HTML5兼容性大比拼
  7. python 日志 logging模块(详细解析)
  8. crt安装mysql安装包_Linux安装MySQL步骤
  9. Greenplum 模糊查询 实践
  10. Java 编程(基础面试题)
  11. 用Ventoy同时引导ubuntu/centos/windows多系统安装
  12. PlantUML——程序员画架构图都靠它
  13. GIS空间服务赋能邵阳不动产登记可视化办理
  14. 乔布斯斯坦福毕业演讲,这是我听过最精彩的毕业演讲!
  15. Notepad++ 插件 JsonViewer V1.40 64位32位
  16. 怎么用软碟通制作U启动和再生龙恢复LINUX系统及备份
  17. iOS Swift 使用 CLLocationManager 定位
  18. 键盘控制计算机的原理,键盘内部结构和原理的说明
  19. html网页自动铺满屏幕,HTML+CSS入门 高度如何铺满全屏
  20. 工控机和服务器哪个稳定性高,简单分析工控机和服务器有什么不同

热门文章

  1. mysql 用命令行复制表数据到新表
  2. Node.js-sublime text3 配置node.js(ERROR: The process node.exe not found.)
  3. python的闭包函数
  4. 人脸和性别识别(基于OpenCV)
  5. JSTL学习笔记3-----URL相关标签的使用
  6. Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现...
  7. 一辈子都有用的的75句话
  8. SCSF 系列:Smart Client Software Factory 启动过程详解
  9. 深度剖析Kubernetes API Server三部曲 - part 1
  10. JavaSE基础之构造器(构造方法)和一般方法