我正在尝试编写用 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 编写所有内容。