Je suis en train d'écrire un wrapper python C pour une fonction (libFunc) dont le prototype estarguments passant Python C Extension par référence
libFunc(char**, int*, char*, int)
Comment puis-je utiliser PyArg_ParseTuple pour la mise en place des arguments pour l'appel de fonction. Voici ce que j'ai actuellement
#include <Python.h>
PyObject* libFunc_py(PyObject* self, PyObject* args)
{
char* input;
char** output;
int inputlen;
int* outputlen;
PyArg_ParseTuple(args, "sisi" , output, outputlen, &input, &inputlen);
int ret = libFunc(output, outlen, input, inputlen);
return Py_BuildValue("i", ret);
}
Je suis capable de faire la même chose avec ctypes en utilisant byref.
Voici un exemple qui utilise [Cython] (http://cython.org): [libfunc.pyx] (https://gist.github.com/cf5e036a88d1b12ea64a) – jfs
Merci pour le code ... mais je n'ai pas de pyrex dans mon environnement. Pouvez-vous me dire, comment libérer la mémoire (allouée par libfunc) dans mon code ci-dessous? – Kamal
1. Les utilisateurs de votre code n'ont pas besoin de Cython. Vous en avez seulement besoin pour générer des sources C pour vous. 2. Vous pouvez appeler 'free (output)' si 'libFunc()' utilise 'malloc()' pour allouer de la mémoire à 'output'. 3. s/outlen/outputlen/ – jfs