2

我的 C++ IDE 是 Visual Studio 2012 Express 版本,我的 Python IDE 是 Aptana3(64 位)。我的电脑是 Windows 7 64 位。

我用 C++(Win32 控制台应用程序)编写了一个 .dll,它基本上遵循MSDN的说明。当我使用 C++ 应用程序调用它时,它运行良好。

然后我尝试通过以下代码从 Python 调用它:

import ctypes

d = ctypes.WinDLL("C:\\DynamicLibrary\\Debug\\MathFuncsDll.dll")

但是,我有以下错误:

File "`<pyshell#8>`", line 1, in <module>
d = ctypes.WinDLL("C:\\DynamicLibrary\\Debug\\MathFuncsDll.dll")
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 is not a valid Win32 application

我已经用谷歌搜索过这个错误信息,有些帖子说这是因为 32 位和 64 位之间的兼容性。但我对此表示怀疑,因为我的 IDE 和系统都是 64 位的。

我可以知道我错了吗?

提前谢谢了。:)

4

3 回答 3

3

该错误最常见的解释是系统试图将 32 位 DLL 加载到 64 位进程中,反之亦然。您的系统是 64 位的这一事实只会使诊断更有可能。也许您的 Python 是 64 位的,但 C++ 项目输出的是 32 位 DLL。或相反亦然。

在您声明您的 Python 安装是 64 位的问题中。在这种情况下,您需要查看您的 C++ 项目。你的目标是什么平台?Win32 还是 x64?我的钱是在这个问题的答案上,即你的目标是 Win32。

这是最可能的解释。除此之外,下一个最可能的原因是完全相同的问题,但是对于其中一个依赖项。Python 进程和 DLL 匹配,但在解析 DLL 的依赖项时,加载程序会找到错误位数的 DLL。

于 2013-09-11T16:07:00.463 回答
0

将您的 C 代码构建为 X64 版本

我对其进行了测试,实际上效果很好

于 2014-03-12T09:06:51.667 回答
0

我已经用谷歌搜索过这个错误信息,有些帖子说这是因为 32 位和 64 位之间的兼容性。但我对此表示怀疑,因为我的 IDE 和系统都是 64 位的。

是的,你的研究是正确的。

我的 C++ IDE 是 Visual Studio 2012 Express 版本,我的电脑是 Windows 7 64 位。

这并不能保证您会构建 64 位二进制文​​件。事实上,VS 2012 IDE 是一个 32 位应用程序。它的编译器和负责生成 64 位二进制文​​件的 CRT。此外,Visual Studio 的默认设置是生成 32 位二进制文​​件

您可以轻松地 google 并确定如何使用 Visual Studio 构建 64 位二进制文​​件。或者,请参阅链接How to: Configure Visual C++ Projects to Target 64-Bit Platforms

我的 Python IDE 是 Aptana3(64 位)。我的电脑是 Windows 7 64 位。

这仍然没有说明您的 Python Installation 的 Bitness 。

如有疑问,请检查您dll和您的python.exe. 您可以使用以下方法轻松确定位数dumpbin

C:\Python27>dumpbin /headers python.exe|grep "machine"
             14C machine (x86)
于 2013-09-11T16:28:57.943 回答