在Ctypes中加载Windows DLL时遇到问题,引发错误:WindowsError: [Error 193] %1 is not a valid Win32 application
在我的例子中,它是一个32位DLL,在windows7 64位上用VS2012构建,在我的开发机器上我可以很好地加载它。我使用dumpbin /headers检查了它是否为32位:
^{pr2}$
当我试图通过Ctypes在生产虚拟机(也是Windows7 64位)上加载相同的DLL时,会出现问题。我要做的是:from ctypes import *
self.dll = CDLL(dllabspath)
我得到:File "C:\Users\user\Desktop\WinPython-32bit-2.7.10.1\.....\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 is not a valid Win32 application
从其他问题来看,我已经试了好几种方法。在This、this、this和this问题表明我的环境必须相同,即32位Python,32位DLL。这是我的开发系统和我正在测试的虚拟机上的情况。在这两个版本中,我使用的是最新版本的32位WinPython。它在dev机器上工作,在VM上失败。
Here,它与g++相关,并且依赖于旧的visualstudio运行时。我用VS2012编译了所有的东西,所以我不认为这在这里适用。对需要MSVCR80.dll的第三方库存在延迟加载依赖项,但它是延迟加载且从不调用的。>P>我也在目标机上安装了VisualC++ 32位运行时。
This建议DLL需要导出一个C接口,它确实这样做了。
我知道DLL的文件路径/文件名是正确的,就像以前一样,存在缺少DLL依赖项的问题,在那里我得到了一个Windows弹出窗口。这些都不见了。
这个错误非常普遍,相当隐晦。由于它在同一Python env中的dev机器上工作,我假设它与一些只有visualstudio安装才能提供给我的依赖关系有关?在
我怎样才能正确地解决这个问题?在