在python中加载DLL时出错,不是有效的win32应用程序

在python中加载DLL时出错,不是有效的win32应用程序,python,dll,ctypes,Python,Dll,Ctypes,我试图在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.Wi

我试图在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
C:\Python27>python test.py
回溯(最近一次呼叫最后一次):
文件“test.py”,第4行,在
dsusb=ctypes.windlel('c:\python27\dsusb.dll'))
文件“C:\Python27\lib\ctypes\\uuuu init\uuuu.py”,第365行,在\uuu init中__
self.\u handle=\u dlopen(self.\u名称,模式)
WindowsError:[错误193]%1不是有效的Win32应用程序
我还用相同的代码尝试了cdll

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


我是否加载此DLL错误,或者DLL中是否存在错误?

如评论所示,这可能是架构问题

如果将32位DLL与64位Python一起使用,或者反之亦然,则可能会出现错误


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

我也遇到了同样的问题。我通过使用VS2015 x64本机工具命令提示符编译我的C代码进行了修复。现在所有数据都是64位的。

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

确保与体系结构相匹配——32位Python和32位DLL,等等
windl
切换到stdcall调用约定。从标题中应该清楚使用哪种约定<代码>'p'和
'd'
都可以,但总的来说,你可以省去自己的麻烦。或者只使用前斜杠。Windows文件API将它们转换为反斜杠,除了使用
“\\?\”
前缀的长Unicode路径。我将\更改为/,输出没有更改。我不确定,但我相信我正在运行32位的python(不知道在哪里检查python的版本)。不确定如何读取DLL头…还有其他想法吗?
platform.architecture()
返回python进程是32位还是64位,但这只是基于指针大小,您可以使用
ctypes.sizeof(ctypes.c\u void\u p)
。对于DLL,您可以使用Dependency Walker或Visual Studio的dumpbin。看起来这是由于我使用64位python打开32位DLL造成的,您应该将其作为一个答案,以便我可以投票支持它。如何操作?这是不正确的。如果缺少.DLL,则会出现另一个错误。