C语言 OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes



我正在尝试编写用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:UserssplDesktopCtypes TestingCtypes 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:UserssplDesktopCtypes TestingCtypes tester 2.dll")
File "C:Userssplanaconda3envsBlank testerlibctypes__init__.py", line 364, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application

导致此错误的原因是什么,我该如何解决?我正在使用带有 Windows 64 的 10 位机器,我的 python 版本是 64 位。我不太了解 C,主要目标是让它工作,以便我可以用 python 编写所有内容。

这是典型的CPU架构(032位(您的.dll(064位(尝试加载它的Python进程((不匹配。检查 [SO]: Python Ctypes - 加载 dll 抛出 OSError: [WinError 193] %1 不是有效的 Win32 应用程序 (@CristiFati的答案( 以获取更多详细信息。

构建064 位 (pc064( 版本的.dll
您可以使用上述URL中的命令行工具,也可以设置VStudio IDE来执行此操作,如 [MS.Docs]:如何:将 Visual Studio C++ 项目配置为面向 64 位 x64 平台:

  1. 打开要配置的C++项目。
  2. 打开该项目的属性页。有关详细信息,请参阅在 Visual Studio 中设置C++编译器和生成属性。
  3. 选择"配置管理器
  4. "按钮以打开">配置管理器"对话框。
  5. 在">活动解决方案平台"下拉列表中,选择<"新建...>选项以打开">新建解决方案平台"对话框。
  6. 在">键入或选择新平台">下拉列表中,选择 64 位目标平台。
  7. 选择">确定">按钮。在上一步中选择的平台将显示在">配置管理器"对话框中的活动解决方案平台下。
  8. 选择">配置管理器"对话框中的">关闭"按钮,然后选择">"属性页"对话框中的">确定">按钮。

最新更新