Интегрировать реализации интерфейса C на Python в существующую программу на C, позволяя реализациям Python можно беспрепятственно использовать в более крупной программе.
Рассмотрим следующее определение интерфейса C:
class myif {
public:
virtual float myfunc(float a) = 0;
};
Включите полиморфизм с помощью SWIG:
%module(directors="1") module %include "myif.h"
Создание реализации Python:
import module
class MyCl(module.myif):
def __init__(self):
module.myif.__init__(self)
def myfunc(self, a):
return a * 2.0
Инициализировать Python (main.cc):
Py_Initialize();
Импортируйте модуль Python:
PyObject *module = PyImport_Import(PyString_FromString("mycl"));
Создать экземпляр и выполнить функцию:
PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
Финализация:
Py_Finalize();
Раскрытие среды выполнения SWIG:
swig -Wall -c -python -external-runtime runtime.h
Перекомпилировать модуль SWIG:
g -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
Помощник Функция для преобразования:
myif *python2interface(PyObject *obj) {
...
}
int main() {
...
myif *inst = python2interface(instance);
std::cout myfunc(input) Следуя этим шагам, можно успешно реализовать реализации интерфейса C на Python и легко интегрировать их в более крупные программы на C, обеспечивая большую гибкость и расширяемость.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3