Ich weiss nicht, ob das so funktioniert. Eigentlich sollte es, weil keine Typprüfung vorgenommen wird, aber das was Du von `buffer_info()` zurückbekommst ist ein Integer und die Funktion sollte einen Zeiger bekommen. Ich habe mal hiermit experimentiert:antimicro hat geschrieben:Damit bekomme ich mein Array das ich dann der Funktion übergebe:Code: Alles auswählen
def Array(length,typecode='L',item=[0]): """Erstellt ein Array dem typecode entsprechend.""" return array.array(typecode, item * length) DriverIDArray = Array(10)
Code: Alles auswählen
DriverNum = yasdi.yasdiGetDriver(DriverIDArray.buffer_info()[0],maxDriverIDs)
Code: Alles auswählen
void reverse(char *start, unsigned int length)
{
char tmp;
char *end = start + (length - 1);
while (start < end) {
tmp = *start;
*start++ = *end;
*end-- = tmp;
}
}
Code: Alles auswählen
import array
import ctypes
test_so = ctypes.cdll.LoadLibrary('./test.so')
reverse = test_so.reverse
reverse.argtypes = (ctypes.c_char_p, ctypes.c_uint)
reverse.restype = None
#
# The trailing zero byte is just there to be able to print the pointer object.
#
data = array.array('c', '123456\x00')
print ' data:', data
data_pointer = ctypes.c_char_p(data.buffer_info()[0])
print 'data_pointer:', data_pointer
length = 4
print '\nreversing first %d chars...\n' % length
reverse(data_pointer, length)
print ' data:', data
print 'data_pointer:', data_pointer