這是我第一次嘗試使用Ctypes。我有一個C dll,它執行簡單的緩衝區操作,將1添加到其內容。用Python包裝C庫,但返回的數組不變
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(* data)'的結果,而不是實際修改'data'本身。 「data_array」的內容是否改變了? – spiffman
@spiffman這是問題,但'data_array'是一個類型,而不是該類型的一個實例。 – Flexo