在Python中通过Ctypes传递指向DLL的指针

在Python中通过Ctypes传递指向DLL的指针,python,c,dll,Python,C,Dll,我试图使用Python与我创建的DLL中的“ReturnBuffer”函数进行接口,但遇到了缓冲区值似乎没有被函数修改的问题。“ReturnBuffer”函数有两个参数,缓冲区长度和指向缓冲区的指针,我想知道我是否正确传递了指针。我编写了c函数,如下所示: __declspec(dllexport) int ReturnBuffer (int num_numbers, unsigned __int32 *buffer); int ReturnBuffer (int num_numbers, u

我试图使用Python与我创建的DLL中的“ReturnBuffer”函数进行接口,但遇到了缓冲区值似乎没有被函数修改的问题。“ReturnBuffer”函数有两个参数,缓冲区长度和指向缓冲区的指针,我想知道我是否正确传递了指针。我编写了c函数,如下所示:

__declspec(dllexport) int ReturnBuffer (int num_numbers, unsigned __int32 *buffer);

int ReturnBuffer (int num_numbers, unsigned __int32 *buffer)
{
    int i;
    for (i = 0; i < num_numbers; i++) {
    buffer[i] = buffer[i] + i ;
    }
    return 1;
}
然后我创建一个1的数组,并将数组的长度和数组的指针传递给函数“ReturnBuffer”,我的期望是函数将获取指针并修改缓冲区中的值

_math.ReturnBuffer.restype = ctypes.c_int
_math.ReturnBuffer.argtypes = [ctypes.c_int, ctypes.POINTER(ctypes.c_uint32)]

nelem = 10
variable = ctypes.c_double(10.0)
Buffer_Type = ctypes.c_uint32 * nelem
Buffer = (1,1,1,1,1,1,1,1,1,1)

print(_math.ReturnBuffer(ctypes.c_int(nelem),Buffer_Type(*Buffer)))
print(Buffer)

Screen Output:
1
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

Process finished with exit code 0

阵列初始化在文档中有描述:

试试这个:

Buffer = (ctypes.c_uint32 * nelem)()
for i in range(0, nelem):
    Buffer[i] = 1
print(_math.ReturnBuffer(nelem, Buffer))
print(Buffer)
或者这个:

Buffer = (ctypes.c_uint32 * nelem)(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
print(_math.ReturnBuffer(nelem, Buffer))
print(Buffer)
Buffer = (ctypes.c_uint32 * nelem)(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
print(_math.ReturnBuffer(nelem, Buffer))
print(Buffer)