Utilisation de librairie binaire(dll sous windows et sous linux)

kollibar Messages postés 45 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 31 janvier 2006 - 27 mars 2005 à 20:07
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 13 juin 2005 à 01:53
comment je peut faire pour créer une dll (en C ou C++ ) et utiliser ses fonctions en python.

je sais qu'il y a des contraintes sur l'écriture de la dll mais je ne
les connais pas et je ne sais aps non plus comment la charger apres

Et j aimerai savoir faire qq chose se similaire sous linux

KOLLIBAR

1 réponse

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
13 juin 2005 à 01:53
La plupart des modules Python sont codés en C, les types simples en
générale. Ce que tu veux faire c'est de l'interfaçage apparement, c'est
à dire utiliser du code C/C++ (ou autre) dans du Python. Pour faire ça
il va te falloir un pe de motive, c'est pas facile au début. Sous
windows on créer un module en C et on le compile de façon à obtenir une
librairie dynamique .dll, sous linux .so. Je ne sais pas comment on
fait sous win, mais sous linux une fois que tu as ton module compilé en
librairie dynamique (.so) il suffit de faire un import avec le nom de
la librairie dynamique pour utiliser les fonctions interfacées.

Voici par exemple un module écrit en C pour intarfacer printf.


/* Fichier stdio.c

Interfaçage de la fonction printf */



#include "Python.h"



#ifdef __cplusplus

extern "C" {

#endif



// déclaration de la fonction d'interfaçage

static PyObject * stdio_printf(PyObject *self, PyObject *args);



/* définition du tableau de structures pour la description des

* fonctions

*/

static PyMethodDef stdioMethods[] = {

{"printf", stdio_printf, METH_VARARGS, "Pareil que printf en C"},

{NULL, NULL, 0, NULL} /* Sentinel */

};



// définition de la fonction d'interfaçage

static PyObject * stdio_printf(PyObject *self, PyObject *args) {

const char *commande;

int retour;



if (!PyArg_ParseTuple(args, "s", &commande))

return NULL;

retour = printf(commande);



return Py_BuildValue("i", retour);

}



// fonction d'initialisation du module stdio

PyMODINIT_FUNC initstdio(void) {

Py_InitModule("stdio", stdioMethods);

}



vas voir sur le sites de Python, section API Python/C, Extending/Integrating C/Python



Bonne chance.

Bouba
0
Rejoignez-nous