ctypes在正确值的末尾输出未知值

时间:2010-06-30 13:38:12

标签: python ctypes

我有以下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;它只是我能找到的最简单的例子,它产生的行为与我正在使用的较长的函数相同。)

1 个答案:

答案 0 :(得分:3)

mydll.PrintArray.restype = None
mydll.PrintArray(px)

默认情况下,ctypes假定函数返回一个整数类型,这会导致未定义的行为(读取垃圾内存位置)。