Bu, Ctypes'i ilk kez kullanma girişimim. İçeriğine 1 ekleme basit bir arabellek manipülasyon yapan bir Cll var. Python'da sarılı C kitaplığı, ancak döndürülen dizi değişmedi
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;
}
}
Ve piton kodunda
Bendata = [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]
alıyorum sonuç 42'dir ancak verilerin içeriği değişmeden kalır var. Baktım ama hala sebebini bulamıyorum.
'Verilerin kendisinin değiştirilmesinden çok' data_array (* data) 'sonucunu değiştirdiğiniz anlaşılıyor. 'Data_array' içeriği değişiyor mu? – spiffman
@spiffman bu sorun, ancak 'data_array' türünde değil, bu türün bir örneği de. – Flexo