You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用ctypes导入C编译dll提示WinError 193错误如何解决?

问题解决方案:ctypes调用DLL报WinError 193错误

报错核心原因

你遇到的OSError: [WinError 193] %1 is not a valid Win32 application错误,本质是编译得到的DLL文件架构,和当前运行的Python解释器架构不匹配,64位Python无法加载32位DLL,32位Python也无法加载64位DLL。

解决步骤

  1. 先确认当前Python的架构
    打开终端执行命令:
    python -c "import platform;print(platform.architecture())"
    
    输出为('64bit', 'WindowsPE')则是64位Python,输出('32bit', 'WindowsPE')则是32位Python。
  2. 调整gcc编译参数匹配架构
    • 若使用64位Python:需安装64位版本的MinGW-w64 gcc工具链,编译时添加-m64参数强制生成64位DLL,编译命令修改为:
      gcc main.c --shared -m64 -o main.dll
      
    • 若使用32位Python:需安装32位版本的gcc工具链,编译时添加-m32参数强制生成32位DLL,编译命令修改为:
      gcc main.c --shared -m32 -o main.dll
      

额外避坑提示

  1. C语言代码建议添加导出函数声明,避免gcc编译时自动篡改函数名,修改后的C代码如下:
    __declspec(dllexport) int mul(int a, int b) {return a*b;}
    
  2. Python调用DLL函数前,建议提前指定函数的参数类型和返回值类型,避免ctypes默认类型转换出错,完整调用代码如下:
    import ctypes
    myDLL = ctypes.CDLL('C:\\Users\\Username\\Desktop\\main.dll')
    # 声明mul函数的两个入参都是int类型
    myDLL.mul.argtypes = [ctypes.c_int, ctypes.c_int]
    # 声明mul函数的返回值是int类型
    myDLL.mul.restype = ctypes.c_int
    # 测试调用
    print(myDLL.mul(2, 3))
    
    若输出结果为6则代表DLL调用正常。

内容的提问来源于stack exchange,提问作者Parsa Saberi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:15:01