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的跨越就是一块硬骨头,如下图所示.显然,这个难点长期以来困扰大家,给大家带来极大不便,亟待解决.
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方法(一)相关推荐
- python suds_python使用suds调用webservice接口的方法
最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库来实现了 1.安装suds mac: sudo pip in ...
- 自学Python 64 使用Python语言收发电子邮件
Python 使用Python语言收发电子邮件 文章目录 Python 使用Python语言收发电子邮件 一.开发POP3邮件程序 1.类 2.方法 二.开发SMTP邮件程序 自从互联网诞生那一刻 ...
- 一位面试者提到直接调用vuex中mutations方法
简述是用this.$store.mutations.xxx(xx)方式调用,因从未见过此种调用方式,回来就搜索了一下,查询结果如下 首先前文: 获取 state 的方式有两种,分别是 this.$st ...
- Python学习笔记——模块调用与字符串拼接方法
文章目录 一.调用模块 1.import 模块名 2.调用模块里的函数 3.time模块与random模块 sleep()函数 random.randint() 二.不同数据类型的拼接 1.格式符% ...
- 32位和64位操作系统及软件的区别
下面,我用最简洁的文字尽可能作最详尽的回答:两者之间存在的"五大不同".与此同时,着重说明Microsoft Windows64位(x64)操作系统,相对于32位(x86)操作系统 ...
- C++_32位和64程序
catalog 32位和64程序的区别 32位和64程序的区别 我们这里说( 32位, 还是64位), 说的是: (这个exe文件), 而不是(电脑)!!! 编译器, 可以生成 (32位的程序), 也 ...
- python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
基本上判断python对象是否为可调用的函数,有三种方法: 1.使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定 ...
- 如何确定我的Python Shell是在OS X上以32位还是64位模式执行?
我需要一种方法,从外壳程序中告诉外壳程序处于哪种模式. 我尝试查看平台模块,但似乎只告诉您"有关可执行程序所使用的位架构和链接格式"的信息:尽管二进制文件编译为64位(我在OS X ...
- python 32位和64位共存以实现打包32位exe和64位exe
一.简介 完成pkg封包源码后,百度得到python py格式源码打包成exe 文件的方法 1.打包exe文件方法 在这之前,仅仅只是安装了python,并未安装其他相关工具. 首先,安装 pyins ...
最新文章
- 是时候转型 Serverless 来玩微服务了吗?
- spring mvc之HandlerMapping
- 133.保护频带 134.流量控制在哪些层实现
- win10下docker如何安装?
- 【深度学习】词的向量化表示
- html5 css3浏览器,五大主流浏览器CSS3和HTML5兼容性大比拼
- python 日志 logging模块(详细解析)
- crt安装mysql安装包_Linux安装MySQL步骤
- Greenplum 模糊查询 实践
- Java 编程(基础面试题)
- 用Ventoy同时引导ubuntu/centos/windows多系统安装
- PlantUML——程序员画架构图都靠它
- GIS空间服务赋能邵阳不动产登记可视化办理
- 乔布斯斯坦福毕业演讲,这是我听过最精彩的毕业演讲!
- Notepad++ 插件 JsonViewer V1.40 64位32位
- 怎么用软碟通制作U启动和再生龙恢复LINUX系统及备份
- iOS Swift 使用 CLLocationManager 定位
- 键盘控制计算机的原理,键盘内部结构和原理的说明
- html网页自动铺满屏幕,HTML+CSS入门 高度如何铺满全屏
- 工控机和服务器哪个稳定性高,简单分析工控机和服务器有什么不同
热门文章
- mysql 用命令行复制表数据到新表
- Node.js-sublime text3 配置node.js(ERROR: The process node.exe not found.)
- python的闭包函数
- 人脸和性别识别(基于OpenCV)
- JSTL学习笔记3-----URL相关标签的使用
- Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现...
- 一辈子都有用的的75句话
- SCSF 系列:Smart Client Software Factory 启动过程详解
- 深度剖析Kubernetes API Server三部曲 - part 1
- JavaSE基础之构造器(构造方法)和一般方法