47

我正在尝试在 python 中加载一个 DLL 来调用函数。

import ctypes
from ctypes import *

dsusb = ctypes.WinDLL('c:\python27\dsusb.dll')

我的堆栈中出现以下错误。

C:\Python27>python test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    dsusb = ctypes.WinDLL('c:\python27\dsusb.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

我也用相同的代码尝试了 cdll。

我查了一下错误,windows说这是由于路径包含空格......我认为这不是真正的问题......

我加载这个 DLL 是错误的还是 dll 中可能有问题?

4

3 回答 3

55

正如评论所暗示的,这可能是一个架构问题。

如果您在 64 位 Python 中使用 32 位 DLL,反之亦然,那么您可能会遇到错误。

由于我之前遇到过您的错误,因此我建议您尝试使用 32 位 Python 加载您的 DLL。

测试 *.dll 文件是 32 位还是 64 位的一种方法是使用dumpbin.exe,例如

dumpbin /headers dsusb.dll

...

FILE HEADER VALUES
             14C machine (x86)
...

machine (x86)表示32位,machine (x64)表示64位。

于 2015-01-12T20:16:01.910 回答
2

我遇到过同样的问题。我通过使用 VS2015 x64 本机工具命令提示符编译我的 C 代码来修复。现在一切都是 64 位的。

于 2016-08-04T18:34:13.740 回答
-2

如果您没有所有其他必需的 dll,也会出现该错误。确保您拥有 dll 所依赖的所有其他 .dll 文件。正如其他人指出的那样,Dependency Walker 是一个很好的工具。

于 2018-09-19T11:49:18.840 回答