Je voudrais passer une variable ByteArray de mon programme Python à ma DLL écrite en C afin d'accélérer un traitement spécifique qui est trop lent en Python. J'ai traversé le Web, essayé des Ctypes avec des combinaisons de byref, cast, memoryviews, addressof, mais rien ne fonctionne. Existe-t-il un moyen simple d'y parvenir sans copier mon ByteArray dans quelque chose d'autre qui passera? Voici ce que je suis en train de faire:Passer un ByteArray de Python à la fonction C
/* My C DLL */
__declspec(dllexport) bool FastProc(char *P, int L)
{
/* Do some complex processing on the char buffer */
;
return true;
}
# My Python program
from ctypes import *
def main(argv):
MyData = ByteArray([1,2,3,4,5,6])
dll = CDLL('CHELPER.dll')
dll.FastProc.argtypes = (c_char_p, c_int)
dll.FastProc.restype = c_bool
Result = dll.FastProc(MyData, len(MyData))
print(Result)
Mais je reçois une erreur de type lors du passage du premier paramètre (MyData) à la fonction C.
Y at-il une solution qui ne nécessite pas trop de frais généraux et qui gaspillerait les avantages de ma fonction C?
Olivier
Qu'est-ce 'ByteArray'? Ne devrait-il pas être «bytearray» (tout en minuscules)? Utilisez-vous Python 3? –
Oui c'est un bytearray, désolé pour la faute de frappe – Marmotte06
Créez un type de tableau ctypes de même longueur et passez le 'bytearray' à son [' from_buffer'] (https://docs.python.org/3/library/ctypes. html # ctypes._CData.from_buffer) contsructor, par exemple 'L = len (MyData);' 'P = (ctypes.c_char * L) .from_buffer (Mes données);' 'dll.FastProc (P, L)'. – eryksun