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 ?

Comment le module ctypes de Python peut-il s'intégrer de manière transparente aux bibliothèques C/C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-11 12:29:11652parcourir

How Can Python's ctypes Module Seamlessly Integrate with C/C   Libraries?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn