„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich Python eine C++-Schnittstelle zur Implementierung zur Verfügung stellen?

Wie kann ich Python eine C++-Schnittstelle zur Implementierung zur Verfügung stellen?

Veröffentlicht am 19.11.2024
Durchsuche:312

How can I expose a C   interface to Python for implementation?

Eine C-Schnittstelle für Python zur Implementierung verfügbar machen

Ziel

Python-Implementierungen einer C-Schnittstelle in ein vorhandenes C-Programm integrieren, sodass Python-Implementierungen möglich sind nahtlos innerhalb des größeren Programms verwendet werden.

Schnittstellendefinition

Betrachten Sie die folgende C-Schnittstelle Definition:

class myif {
public:
  virtual float myfunc(float a) = 0;
};

Importieren und Erweitern der Schnittstelle in Python

  1. Aktivieren Sie Polymorphismus mit SWIG:

    %module(directors="1") module
    
    %include "myif.h"
  2. Erstellen Sie eine Python-Implementierung:

    import module
    
    class MyCl(module.myif):
      def __init__(self):
        module.myif.__init__(self)
      def myfunc(self, a):
        return a * 2.0

Python in C einbetten

  1. Python initialisieren (main.cc):

    Py_Initialize();
  2. Python-Modul importieren:

    PyObject *module = PyImport_Import(PyString_FromString("mycl"));
  3. Instanz erstellen und Funktion ausführen:

    PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
    double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
  4. Finalization:

    Py_Finalize();

Konvertieren eines Python-Objekts in C Zeiger

  1. SWIG-Laufzeit verfügbar machen:

    swig -Wall -c   -python -external-runtime runtime.h
  2. SWIG-Modul neu kompilieren:

    g   -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
  3. Hilfsfunktion für Konvertierung:

    myif *python2interface(PyObject *obj) {
      ...
    }

Endgültige Implementierung in main.cc

int main() {
  ...
  myif *inst = python2interface(instance);
  std::cout myfunc(input) 

Indem Sie diese Schritte befolgen, können Sie Python-Implementierungen einer C-Schnittstelle erfolgreich implementieren und sie nahtlos in größere C-Programme integrieren, was für mehr Flexibilität und Erweiterbarkeit sorgt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3