我可以在64位Python中使用32位DLL或EXE吗?

26

当我在32位python中使用CDLL调用32位dll时,它能够正常工作。

但不幸的是,在我的64位win7操作系统中只安装了64位的python,当调用时出错:它不是有效的win32应用程序!

我能否在64位python中使用32位dll或exe?还是必须安装32位python?


1
你在机器上安装32位Python应该没有问题。 - Joel Cornett
这是 https://dev59.com/yW025IYBdhLWcg3w6aYX 上一般问题的一个具体案例,即从 64 位应用程序加载 32 位共享库。 - cdiggins
1个回答

38

64位的可执行文件无法加载32位的动态链接库。(反过来也是一样的:32位的可执行文件无法加载64位的DLL。)毕竟,它们无法就指针的大小达成一致--如果可执行文件分配了超过4GB边界的内存并想将指针传递给32位的DLL会发生什么呢?

您必须采取以下措施之一:

  1. 制作一个64位版本的DLL;
  2. 使用32位的Python版本;或者
  3. 将DLL托管到单独的(32位)EXE中,并使用某种形式的进程间通信从您的64位Python进程中与之通信。 这里有使用IPC让64位Python进程与32位DLL通信的示例。

1
那么,Python的64位版本不能选择以32位模式运行?就像64位Win7可以执行32位应用程序一样。 - hjhnju
8
64位的Windows可以运行32位进程,但每个独立的进程必须是64位或32位之一;不能将两者混合在单个地址空间中。如果您想将应用程序作为32位运行,则必须将其编译为32位应用程序。(这又涉及到指针大小的问题。如果一个应用程序被编译为期望指针大小为64位,则它不能使用32位指针,反之亦然。)如果应用程序以32位编译,则以32位应用程序运行;如果以64位编译,则以64位应用程序运行(在64位操作系统上),而在32位操作系统上则根本无法运行。 - Joe White
1
这是错误的,从技术上讲,64位DLL / EXE可以加载32位DLL,反之亦然。在GitHub上有一个库可以在Windows上做到这一点。涉及一些汇编级别的东西。 - demberto
@demberto 这是一个有趣的说法。你有更多信息的链接吗? - Joe White
1
@JoeWhite https://github.com/ez8-co/yapi - demberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接