Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++;应用 我试图在我的C++应用程序中嵌入Python,有点类似于第1.4节中发现的方法:_Python_C++ - Fatal编程技术网

在C++;应用 我试图在我的C++应用程序中嵌入Python,有点类似于第1.4节中发现的方法:

在C++;应用 我试图在我的C++应用程序中嵌入Python,有点类似于第1.4节中发现的方法:,python,c++,Python,C++,P>我所面临的问题是,我不能让C++应用程序与.EB文件一起导入“EMB”模块,即写在C++代码中的Python扩展模块。 我有一个Python文件testmod.py: import emb # define some functions def printhello(input): emb.numargs() return 2 def timesfour(input): print(input * 4) 在我的C++应用程序中,我有这样的代码: PyImpor

<> P>我所面临的问题是,我不能让C++应用程序与.EB文件一起导入“EMB”模块,即写在C++代码中的Python扩展模块。 我有一个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是非空的;事情看起来不错。所以我认为“嵌入式模块”很好

如果我将上面的最后两行更改为:

PyObject* testModule = PyImport_ImportModule("testmod");
PyObject* pFunc = PyObject_GetAttrString(testModule, "printhello");

这也很好,<强>提供了从EnthMod。Py <强>中删除行EMP.NUMARGSH()。一旦添加了该行,重新运行C++应用程序,TestMoad就变为NULL,这意味着有什么地方出了问题。 有什么想法吗?


这就是该功能应该使用的方式吗?

python是否有任何方法将实际错误反馈给您?系统通常可以做到这一点。哇,我是个白痴,谢谢你的建议。我刚才在emb.numargs()行中有一个缩进错误。我想这就是我整天在两种语言之间切换的结果。FWIW,我使用PyErr_Print()来打印错误。这就是为什么我讨厌python并避免它。))python是否有任何方法将实际错误反馈给您?系统通常可以做到这一点。哇,我是个白痴,谢谢你的建议。我刚才在emb.numargs()行中有一个缩进错误。我想这就是我整天在两种语言之间切换的结果。FWIW,我使用PyErr_Print()来打印错误。这就是为什么我讨厌python并避免它。))