agr*_*fft 5 c++ python python-2.7
我刚刚开始使用 Python 和 C++ 工作,我对为什么无法从 C++ 调用 Python 中的函数感到有点困惑。
这是我当前的 C++ 测试代码:
#include <iostream>
#include <Python.h>
using namespace std;
int main()
{
Py_Initialize();
PyObject* myModuleString = PyString_FromString("test");
PyObject* myModule = PyImport_Import(myModuleString);
if( myModule )
{
PyObject* myFunction = PyObject_GetAttrString(myModule, "Hello");
if( myFunction )
{
PyEval_CallObject( myFunction, NULL );
}
else
{
fprintf( stderr, "myFunction is NULL" );
}
}
else
{
fprintf( stderr, "myModule is NULL" );
}
Py_Finalize();
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的 test.py Python 代码:
import sys
def Hello():
print "Hello, world!"
Run Code Online (Sandbox Code Playgroud)
之前我进行了更复杂的测试,但遇到了 PyObject_GetAttrString 传回 NULL 的问题,所以我想做一个更简单的测试,调用 PyObject_GetAttrString 后仍然收到 NULL。根据我的理解, PyObject_GetAttrString 将 PyObject* 获取到函数,然后我调用它,所以在那里接收 NULL 基本上意味着我无法调用该函数。
另外,是的,我查看了https://docs.python.org/2.7/ ,甚至测试了https://docs.python.org/release/2.6.5/extending/embedding.html#的步骤 5.3 中给出的示例纯嵌入(我使用 2.7.7 因为我计划与 3ds Max 集成)。它仍然遇到与 PyObject_GetAttrString 相同的问题。
我假设这是一个简单的错误或我在 C++ 或 Python 代码中遗漏的步骤。