微软公司的官方网站针对这个问题描述如下:
在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。
Python解释器的常规实现CPython本身也是一个进程,如果它被编译64位程序,那么也就无法直接加载32位的dll了。
-------- -------- -------- -------- -------- -------- --------
那么只有通过非直接的方式:
1. 如果对dll的调用不频繁并且对于运行结果的处理要求比较简单,可以在系统中同时安装32位和64位的Python解释器。在运行于64位Python解释器的代码中,通过subprocess启动32位的Python解释器运行python代码加载32位的dll。
用32位py调用DLL,生成EXE,也可以,效果同上,但额外需要一个生成EXE的过程。
2. 如果对dll的运行结果要求频繁快速的处理,那么可以使用进程间通信(RPC)。分别启动32位和64位的Python解释器,两者之间用RPC通信。简单的RPC用socket自己写就行,或者基于rpyc这种第三方python库,如果是企业级别的应用可以选择Thrift。
这个方法的好处是,32位和64位的Python解释器可以分别部署在不同机器上。
3. 如果对运行性能要求非常高,那么可以考虑用C语言写代码包装dll,创建COM服务器,将32位dll的接口函数封装为COM服务器的相关接口。在注册表中注册COM服务器。64位python用第三方python库comtypes来访问COM对象。
这个只适用于Windows平台。
4. 如果有对应dll的源码,那么可以重新配置成64位方式编译,获得64位的dll,就可以直接调用了。