我正在尝试在我的C ++应用程序中嵌入Python,有点类似于1.4节中的方法:
https://docs.python.org/3.5/extending/embedding.html
我遇到的问题的概要是我无法让C ++应用程序使用导入'emb'模块的.py文件,即编写到C ++代码中的Python扩展模块。 / p>
我有一个Python文件,testmod.py:
import emb
# define some functions
def printhello(input):
emb.numargs()
return 2
def timesfour(input):
print(input * 4)
在我的C ++应用程序中,我有以下代码:
PyImport_AppendInittab("emb", &(mynamespace::PyInit_emb) );
Py_Initialize();
PyObject *globals = PyModule_GetDict(PyImport_AddModule("__main__"));
PyObject *testModule = PyImport_ImportModule("emb");
PyObject* pFunc = PyObject_GetAttrString(testModule, "numargs");
此后,pFunc为非NULL;事情看起来不错。所以我认为'嵌入式模块'很好。
如果我将上面的最后两行更改为:
PyObject* testModule = PyImport_ImportModule("testmod");
PyObject* pFunc = PyObject_GetAttrString(testModule, "printhello");
这也很好,如果从testmod.py中删除了行emb.numargs()一旦我添加了该行,并重新运行C ++应用程序,testModule变为NULL,这意味着什么出了问题。
有什么想法吗? 这是应该使用这种能力的方式吗?