Maison >développement back-end >Tutoriel Python >Comment le module ctypes de Python peut-il s'intégrer de manière transparente aux bibliothèques C/C ?
Exploiter Python pour l'intégration C/C
Python offre des fonctionnalités polyvalentes pour l'interface avec des bibliothèques externes. Un scénario courant consiste à appeler des fonctions C ou C depuis Python. Pour y parvenir, déployer le module ctypes est une approche efficace. Contrairement à certains outils tiers, ctypes est intégré à la bibliothèque standard Python, garantissant une stabilité accrue et une disponibilité généralisée.
L'utilisation de ctypes vous permet de contourner la dépendance à la compilation sur Python. Par conséquent, toute instance Python équipée de ctypes peut exploiter votre liaison, quelle que soit la version utilisée lors de la compilation.
Pour illustrer l'utilisation des ctypes, considérons une classe C de base, Foo, définie dans un fichier nommé foo. cpp :
#include <iostream> class Foo { public: void bar() { std::cout << "Hello" << std::endl; } };
Pour faciliter l'interaction avec les ctypes, nous devons déclarer les fonctions C comme extern "C":
extern "C" { Foo* Foo_new() { return new Foo(); } void Foo_bar(Foo* foo) { foo->bar(); } }
Ensuite, nous compilons ce code dans une bibliothèque partagée :
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
Enfin, nous écrivons un wrapper Python pour combler le fossé :
from ctypes import cdll lib = cdll.LoadLibrary('./libfoo.so') class Foo(object): def __init__(self): self.obj = lib.Foo_new() def bar(self): lib.Foo_bar(self.obj)
Avec cette configuration, vous pouvez désormais appeler les fonctions C de manière transparente depuis Python :
f = Foo() f.bar() # Output: "Hello" displayed on screen
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!