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
Libérer: 2024-12-11 12:29:11
original
678 Les gens l'ont consulté

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;
    }
};
Copier après la connexion

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(); }
}
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal