Dies ist mein erster Versuch mit Ctypes zu verwenden. Ich habe eine C-DLL, die eine einfache Puffermanipulation durchführt, um 1 zu ihrem Inhalt hinzuzufügen.Wrapped C-Bibliothek in Python, aber zurückgegebene Array ist unverändert
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;
}
}
Und in meinem Python-Code habe ich
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]
Das Ergebnis bekomme ich 42, aber der Inhalt der Daten bleiben unverändert. Ich habe gesucht, kann aber immer noch nicht den Grund finden.
Sieht so aus, als ob Sie das Ergebnis von 'data_array (* data)' modifizieren, anstatt "data" selbst zu modifizieren. Ändert sich der Inhalt von 'data_array'? – spiffman
@spiffman das ist das Problem, aber 'data_array' ist ein Typ, keine Instanz dieses Typs. – Flexo