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
Linda Hamiltonoriginal
2024-12-31 12:33:20645parcourir

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;
        }
};

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(); }
}

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

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)

Avec ce wrapper, vous pouvez interagir avec le C class :

f = Foo()
f.bar() # Outputs "Hello" to the screen

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!

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