我对c ++没有经验,但对python有合理的经验。我正在尝试加载一个DLL库并按照另一个线程中的说明进行如下操作:
import ctypes
my_dll = ctypes.WinDLL ("c:\\whatever\\whatever.dll")
我得到的回应是:
Traceback (most recent call last):
File "C:\Users\xxx\Anaconda3\lib\site-
packages\IPython\core\interactiveshell.py", line 3035, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-6-8b21ed13fe33>", line 1, in <module>
mydll = cdll.LoadLibrary(dll_path)
File "C:\Users\xxxx\Anaconda3\lib\ctypes\__init__.py", line 429, in LoadLibrary
return self._dlltype(name)
File "C:\Users\xxx\Anaconda3\lib\ctypes\__init__.py", line 351, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
操作系统是64位Windows 10。 有人能指出我的错误吗?
感谢。
答案 0 :(得分:2)
如果存在并且找到了dll,则可能是32位和64位之间存在不匹配。对于C ++应用程序,可执行文件和加载的dll必须是相同的体系结构(32位或64位),这同样适用于Python可执行文件。这意味着如果你运行64位Python,它可能无法加载32位dll,反之亦然(实际上有一种方法可以通过创建帮助程序32位进程并使用IPC来实现,但我可以不确定Python是否这样做。)
即。检查dll和可执行文件(Python)是否都是相同的体系结构(位大小)。