使用ctypes加载kernel32.dll时报WinError 193错误该如何解决?
报错原因
- 架构不匹配:你当前使用的是64位版本Python(从安装路径
C:\Program Files\Python39可判断,32位Python默认安装在C:\Program Files (x86)目录下),而你加载的C:\Windows\SysWOW64\kernel32.dll是32位系统库。64位Windows系统中,System32目录存放64位系统dll,SysWOW64是32位程序兼容层目录,存放32位系统dll,Windows不允许不同架构的进程与dll互相加载,因此触发193错误。 - 函数归属错误:你调用的
timeGetTime不属于kernel32.dll,而是属于Windows多媒体库winmm.dll,即便加载正确架构的kernel32.dll也无法找到该函数。
修复方案
- 不要手动指定系统dll的绝对路径,ctypes会自动根据当前Python的架构匹配对应正确路径的系统dll,避免架构匹配错误
- 加载正确的dll(
winmm.dll)调用timeGetTime函数
修复后的代码如下:
from ctypes import cdll # 直接传入dll名称,系统会自动适配对应架构的库 winmm_dll = cdll.LoadLibrary("winmm.dll") print(winmm_dll.timeGetTime())
如果确实需要手动指定路径加载,请按照架构对应选择目录:
- 64位Python加载64位系统dll:使用
C:\Windows\System32下的库 - 32位Python加载32位系统dll:使用
C:\Windows\SysWOW64下的库
内容的提问来源于stack exchange,提问作者Twfyq Bhyry
相关产品推荐
相关产品推荐

