SfondoCome passare un elenco di pitone alla funzione C (DLL) che utilizzano ctypes
ho qualche software di analisi in Python devo passare un elenco di 4096 byte (che assomiglia a questo[80, 56, 49, 50, 229, 55, 55, 0, 77, ......]
) ad un dll, in modo che la dll lo scriva su un dispositivo.
- I byte da scrivere sono memorizzati nei dati di nome variabile
la funzione C (DLL) che deve essere chiamato da pitone è
int _DLL_BUILD_ IO_DataWrite(HANDLE hDevice, unsigned char* p_pBuff, unsigned char p_nByteCntInBuff);
ho accesso al codice dll
Metodo provato
ho cercato di dichiarare un tipo di dati
data_tx = (ctypes.c_uint8 * len(data))(*data)
e richiama la funzione
ret = self.sisdll.IO_DataWrite(self.handle, ctypes.byref(data_tx), ctypes.c_uint8(pending_bytes))
Problemi
Non sembra esserci alcun errore ma il relativo funzionamento. La chiamata API funziona con C e C++.
Sto facendo questo corretto. Qualcuno potrebbe gentilmente indicare l'errore per me?
Avete provato a definire i tipi di argomento: 'IO_DataWrite.argtypes = [c_void_p, POINTER (c_uint8), c_uint8]'? –
Di solito, faccio 'data_tx = (ctypes.c_uint8 * len (data))()' e successivamente copio i dati nell'array e chiamiamo la libreria usando 'ctypes.byref'. Puoi provare questo invece di costruire il tuo array dai dati –
@JensMunk Trasformalo in una risposta, è la risposta giusta – zwol