我有以下DLL('arrayprint.dll')函数,我想通过ctypes在Python中使用:
__declspec(dllexport) void PrintArray(int* pArray) {
int i;
for(i = 0; i < 5; pArray++, i++) {
printf("%d\n",*pArray);
}
}
我的Python脚本如下:
from ctypes import *
fiveintegers = c_int * 5
x = fiveintegers(2,3,5,7,11)
px = pointer(x)
mydll = CDLL('arrayprint.dll')
mydll.PrintArray(px)
最终函数调用输出以下内容:
2
3
5
7
11
2226984
什么是2226984,我如何摆脱它?它看起来不是DLL,x或px的内存地址的十进制值。
谢谢,
麦克风
(注意:我实际上并没有使用PrintArray;这只是我发现的最简单的示例,它产生的行为与我正在使用的较长函数相同。)
最佳答案
mydll.PrintArray.restype = None
mydll.PrintArray(px)
默认情况下,ctypes假定函数返回整数类型,这将导致未定义的行为(读取垃圾内存位置)。