我的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
我已经用Google搜索了这条错误消息,有些帖子说它是因为32位和64位之间的兼容性。但我对此表示怀疑,因为我的IDE和系统都是64位的。
我可以知道我错了吗?
非常感谢提前。 :)
答案 0 :(得分:3)
该错误的最常见解释是系统正在尝试将32位DLL加载到64位进程中,反之亦然。您的系统只有64位的事实使得诊断更有可能。也许你的Python是64位,但C ++项目输出一个32位的DLL。反之亦然。
在问题中,您声明您的Python安装是64位。在这种情况下,您需要查看您的C ++项目。你的目标是什么平台? Win32还是x64?我的钱就在于你的目标是Win32。
这是最可能的解释。除此之外,下一个最可能的原因是完全相同的问题,但对于其中一个依赖项。 Python进程和DLL匹配,但在解析DLL的依赖关系时,加载器会找到错误位的DLL。
答案 1 :(得分:0)
我已经搜索过此错误消息,有些帖子说是因为 32位和64位之间的兼容性。但我怀疑,因为我的 IDE和系统都是64位。
是的,你的研究是正确的。
我的C ++ IDE是Visual Studio 2012 Express版本, 我的电脑是Windows 7 64位。
这并不保证您将构建64位二进制文件。事实上,VS 2012 IDE是一个32位应用程序。它的编译器和CRT负责生成64位二进制文件。此外,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安装的一致性。
如有疑问,请检查dll
和python.exe
的位数。您可以使用dumpbin
C:\Python27>dumpbin /headers python.exe|grep "machine"
14C machine (x86)
答案 2 :(得分:0)
将您的C代码构建为X64版本
我测试了它并且实际上运行良好