如何将来自C / C ++的数据结构编组成python并返回
我有一个用C ++编写的程序,可以使用python的C api编写的扩展扩展,基本上在程序中有一个python解释器,它可以加载包含一些钩子到各种事件的python模块。
我可以将简单的数据类型从C传递给Python,比如字符串或整数。 我可以用另一种方法做同样的事情,我可以调用从Python模块创建的内部C ++ api。 然而,我不能做的是编组更复杂的数据类型,比如类。 例如,我有这样的事情:
class X
{
int a;
int b;
};
我可以调用一些看起来像这样的python钩子:
def some_hook(a, b):
print(str(a + b))
但我宁愿这样做
def some_hook(x):
print(str(x.a + x.b))
我知道如何使用PyObject_CallObject
从C调用python函数,以及如何为它提供一些简单的python变量作为参数(如整数或字符串)。 但我不知道如何从C / C ++中构造Python类,用数据填充它们,然后将它们作为参数传递给PyObject_CallObject
。
我的想法是创建一些代理类,如SWIG(swig.org),我会填满C ++类的数据,然后返回。 我创建了一些.py文件,其中包含这些类的声明,但仍然不知道如何从C / C ++实例化它们并填充它们? 我怎么会这样做 - 将PyObject
转换为C / C ++类?
简而言之:我希望能够将C ++类变成一个python类,以该类作为参数调用一个python函数,然后用这个类从python调用一些其他函数,该类将只是一个C ++ API, python类到C ++中。
关于如何从C中调用python的一些背景知识:http://docs.python.org/3/extending/embedding.html
加载和使用python扩展的应用程序C ++的源代码:https://github.com/huggle/huggle3-qt-lx/blob/master/huggle/pythonengine.cpp
链接地址: http://www.djcxy.com/p/87903.html上一篇: How to marshall data structures from C/C++ into python and back