Heim >Backend-Entwicklung >Python-Tutorial >Wie können Ctypes Python und C/C unter Windows effizient verbinden?

Wie können Ctypes Python und C/C unter Windows effizient verbinden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-31 12:33:20645Durchsuche

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

C/C aus Python aufrufen

Bei der Arbeit mit Windows-Systemen ist die effiziente Bindung von Python an C/C-Bibliotheken von entscheidender Bedeutung. Unter den verfügbaren Optionen sticht das ctypes-Modul als überzeugende Wahl hervor.

Verwendung von Ctypes für Bindungen

Ctypes ist ein integraler Bestandteil der Standardbibliothek von Python. Diese inhärente Stabilität und breite Verfügbarkeit machen es zu einer vorteilhaften Option im Vergleich zu anderen Alternativen. Darüber hinaus sind Ctypes-Bindungen so zugeschnitten, dass sie nahtlos mit jeder Version von Python funktionieren, die Ctypes unterstützt, nicht nur mit der, die während der Kompilierung verwendet wird.

Erstellen einer Python-Bindung mit Ctypes

Betrachten Sie eine vereinfachte C-Klasse namens Foo, die in foo.cpp definiert ist:

#include <iostream>

class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};

Um die Kommunikation mit Python über zu erleichtern ctypes, seine Funktionen müssen als externes „C“ deklariert werden:

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

Kompilieren Sie als Nächstes diesen Code in eine gemeinsam genutzte Bibliothek:

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o

Erstellen Sie abschließend einen Python-Wrapper (z. B. 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)

Mit diesem Wrapper können Sie mit dem C interagieren Klasse:

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

Vorteile von Ctypes

Ctypes vereinfacht den Prozess der Bindung von C/C-Code an Python und bietet eine stabile und allgemein anwendbare Lösung auf Windows-Systemen. Es bietet einen robusten und kompatiblen Ansatz für die Anbindung an native Bibliotheken von Python.

Das obige ist der detaillierte Inhalt vonWie können Ctypes Python und C/C unter Windows effizient verbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn