【发布时间】:2016-08-27 08:31:56
【问题描述】:
我正在学习如何嵌入 Python,在我的测试程序中我从我的 C 应用程序中调用 Python 代码,然后 Python 代码调用我提供的方法:
#include <Python.h>
// The callback function.
extern "C" PyObject * printHello(PyObject *self, PyObject *args) {
printf("hello from C\n");
return 0;
}
PyMethodDef methods [] = {
{ "printHello", printHello, METH_NOARGS, "docs docs docs" },
{ 0, 0, 0, 0 },
};
int main(int argc, char *argv[])
{
Py_Initialize();
Py_InitModule("emb", methods);
PyRun_SimpleString(
"import emb\n"
"emb.printHello()\n"
);
Py_Finalize();
return 0;
}
程序运行并调用了我的函数,但返回时出现异常:
来自 C 的你好 回溯(最近一次通话最后): 文件“”,第 2 行,在 SystemError: 没有设置异常的错误返回
我认为这与调用约定或我的回调函数的签名有关。
特别是,是因为我返回 0 吗?我的函数实际上不需要返回任何内容,这就是我返回 0 的原因。我会使用 void printHello(),但 PyCFunction 要求签名为 PyObject * func(PyObject *self, PyObject *args);
【问题讨论】:
标签: c++ python-embedding