2012-07-25 242 views
15

当我使用CDLL在32位python中调用32位dll时,它运行良好。 但不幸的是,在我的64位win7操作系统中,只安装了64位python,调用它时:它不是一个有效的win32应用程序!我可以在64位python中使用32位dll或exe吗?

我可以在64位Python中使用32位DLL或EXE吗?或者我必须安装32位Python?

+1

在你的机器上安装32位Python应该没问题。 – 2012-07-25 04:13:00

+0

这是http://stackoverflow.com/questions/5720884/load-32-bit-shared-library-from-64-bit-application – cdiggins 2012-10-17 15:35:57

回答

25

64位EXE无法加载32位DLL。 (反之亦然:32位EXE无法加载64位DLL)。毕竟,他们无法就指针的大小达成一致 - 如果EXE分配高于4GB边界的内存并希望通过指向32位DLL的指针?

你必须要么:

  1. 让你的DLL的64位版本;
  2. 使用Python的32位版本;或
  3. 将DLL承载在单独的(32位)EXE中,并使用某种形式的进程间通信从您的64位Python进程与它交谈。
+0

的一般问题的特定情况,因此,64位版本的Python不能选择以32位模式运行?就像64位win7可以执行32位应用程序 – hjhnju 2012-07-25 08:23:00

+5

64位Windows可以运行32位进程,但每个进程必须是64位或32位;你不能在一个地址空间内混合两者。如果你想运行一个应用程序为32位,它必须被编译为一个32位应用程序。 (再次指出这些指针的大小,如果一个应用程序编译期望的指针大小为64位,则它不适用于指向32位的指针,反之亦然。)如果应用程序编译为32位,它将运行作为一个32位应用程序;如果它编译为64位,它将作为64位应用程序运行(在64位操作系统上,并且根本不在32位操作系统上运行)。 – 2012-07-25 12:09:27

相关问题