Maison > développement back-end > Tutoriel Python > Comment les Ctypes peuvent-ils relier efficacement Python et C/C sous Windows ?

Comment les Ctypes peuvent-ils relier efficacement Python et C/C sous Windows ?

Linda Hamilton
Libérer: 2024-12-31 12:33:20
original
640 Les gens l'ont consulté

How Can Ctypes Efficiently Bridge Python and C/C   on Windows?

Appeler C/C depuis Python

Lorsque vous travaillez avec des systèmes Windows, il est crucial de lier efficacement Python aux bibliothèques C/C. Parmi les options disponibles, le module ctypes s'impose comme un choix convaincant.

Utilisation de Ctypes pour les liaisons

Ctypes fait partie intégrante de la bibliothèque standard de Python. Cette stabilité inhérente et cette large disponibilité en font une option avantageuse par rapport à d’autres alternatives. De plus, les liaisons ctypes sont conçues pour fonctionner de manière transparente avec chaque version de Python prenant en charge les ctypes, pas seulement celle utilisée lors de la compilation.

Construction d'une liaison Python avec Ctypes

Considérons une classe C simplifiée nommée Foo définie dans foo.cpp :

#include <iostream>

class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};
Copier après la connexion

Pour faciliter la communication avec Python via ctypes, ses fonctions doivent être déclarées comme extern "C":

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}
Copier après la connexion

Ensuite, compilez 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, créez un wrapper Python (par exemple, fooWrapper.py):

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 ce wrapper, vous pouvez interagir avec le C class :

f = Foo()
f.bar() # Outputs "Hello" to the screen
Copier après la connexion

Avantages de Ctypes

Ctypes simplifie le processus de liaison du code C/C à Python, fournissant une solution stable et largement applicable sur les systèmes Windows. Il offre une approche robuste et croisée pour l'interface avec les bibliothèques natives de Python.

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