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.
Betrachten Sie die folgende C-Schnittstelle Definition:
class myif {
public:
virtual float myfunc(float a) = 0;
};
Aktivieren Sie Polymorphismus mit SWIG:
%module(directors="1") module %include "myif.h"
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 initialisieren (main.cc):
Py_Initialize();
Python-Modul importieren:
PyObject *module = PyImport_Import(PyString_FromString("mycl"));
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)));
Finalization:
Py_Finalize();
SWIG-Laufzeit verfügbar machen:
swig -Wall -c -python -external-runtime runtime.h
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
Hilfsfunktion für Konvertierung:
myif *python2interface(PyObject *obj) {
...
}
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.
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