OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

2024-05-14

我正在尝试编写用 python 封装 C 库的代码。我计划使用 CTypes 来完成此操作,并使用 Visual Studio 来编译我的 DLL。我从一个简单的函数开始,在 Visual Studio 内的标头中添加了以下内容,然后将其构建为 DLL

int our_function(int num_numbers, int* numbers) {
    int i;
    int sum = 0;
    for (i = 0; i < num_numbers; i++) {
        sum += numbers[i];
    }
    return sum;
}

我的Python包装器如下

import ctypes

_sum = ctypes.CDLL(r"C:\Users\spl\Desktop\Ctypes Testing\Ctypes tester 2.dll")
_sum.our_function.argtypes = (ctypes.c_int, ctypes.POINTER(ctypes.c_int))

def our_function(numbers):
    global _sum
    num_numbers = len(numbers)
    array_type = ctypes.c_int * num_numbers
    result = _sum.our_function(ctypes.c_int(num_numbers), array_type(*numbers))
    return int(result)

print(sum.our_function([1,2,-3,4,-5,6]))

当我执行 python 代码时,出现以下错误

Traceback (most recent call last):
  File "sum.py", line 3, in <module>
    _sum = ctypes.CDLL(r"C:\Users\spl\Desktop\Ctypes Testing\Ctypes tester 2.dll")
  File "C:\Users\spl\anaconda3\envs\Blank tester\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application

是什么原因导致此错误以及如何修复它?我使用的是 Windows 10 的 64 位机器,我的 python 版本是 64 位。我对 C 不太了解,主要目标是让它工作,这样我就可以用 python 编写所有内容。


这是一个典型的CPU建筑学 (032bit (your .dll) vs. 064bit (Python尝试加载它的进程))mismatch. Check [SO]:Python Ctypes - 加载 dll 抛出 OSError:[WinError 193] %1 不是有效的 Win32 应用程序(@CristiFati 的答案) https://stackoverflow.com/a/57297745/4788546更多细节。

构建064bit (pc064)你的版本.dll.
您可以使用上述命令行工具URL,或者您可以设置VStudio集成开发环境这样做,如所解释的[MS.Docs]:如何:将 Visual Studio C++ 项目配置为面向 64 位、x64 平台 https://learn.microsoft.com/en-us/cpp/build/how-to-configure-visual-cpp-projects-to-target-64-bit-platforms:

  1. 打开要配置的 C++ 项目。
  2. 打开该项目的属性页。有关更多信息,请参阅在 Visual Studio 中设置 C++ 编译器和构建属性 https://learn.microsoft.com/en-us/cpp/build/working-with-project-properties?view=vs-2019.
  3. 选择配置管理器按钮打开配置管理器对话框。
  4. In the 主动解决方案平台下拉列表中,选择选项打开新的解决方案平台对话框。
  5. In the 输入或选择新平台下拉列表中,选择 64 位目标平台。
  6. 选择OK按钮。您在上一步中选择的平台将显示在下面主动解决方案平台 in the 配置管理器对话框。
  7. 选择Close按钮在配置管理器对话框,然后选择OK按钮在 属性页对话框。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL 的相关文章

随机推荐