这是我第一次尝试使用Ctypes。我有一个C动态链接库,它可以进行简单的缓冲区操作,将1添加到它的内容中。你知道吗
extern "C"
{
__declspec(dllexport) int AddBuffer(unsigned char* data, unsigned char len)
{
int i = 0;
int sum = 0;
for (i = 0; i < len; i++)
{
sum = sum + data[i];
data[i] = data[i] + 1;
}
return sum;
}
}
在我的python代码中
data = [1,2,3,4,5,8,4,6,9]
myfunc = test_dll.AddBuffer
myfunc.argtypes = (ctypes.POINTER(ctypes.c_uint8),ctypes.c_uint8)
data_array = ctypes.c_uint8 * len(data)
result = myfunc(data_array(*data),ctypes.c_uint8(len(data)))
print result
for i in range (0,len(data)):
print data[i]
我得到的结果是42,但数据的内容保持不变。我看了,但还是找不到原因。你知道吗
此代码:
在名为
data_array
的ctypes数组类型的实例中创建data
的匿名副本。你知道吗当您将匿名创建的
data_array
实例传递给正在修改的函数时,即新副本。你知道吗相反,您需要:
它打印出传入函数的同一数组,并确保传入的数组是命名的而不是匿名的。你知道吗
相关问题 更多 >
编程相关推荐