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