我正在尝试从C++中调用Python类中的方法。这是一个C++回调函数调用的方法。
在这个方法中,当我尝试调用Python方法时,它会产生“段错误(segmentation fault)”。
我已经将Python函数的实例保存在全局变量中,例如:
// (pFunc is global variable of type PyObject*)
pFunc = PyDict_GetItemString(pDict, "PlxMsgWrapper");
其中PlxMsgWrapper
是一个Python方法,将在回调函数中使用。
在回调函数中,参数将被创建为
PyObject* args = PyTuple_Pack(2, PyString_FromString(header.c_str()),
PyString_FromString(payload.c_str()));
创建时,
PyObject * pInstance = PyObject_CallObject(pFunc, args);
这行代码导致分段错误。之后会调用实际的Python方法。
PyObject* recv_msg_func = PyObject_GetAttrString(module, (char *)"recvCallback");
args = PyTuple_Pack(1, pInstance);
PyObject_CallObject(recv_msg_func, args);
args
在callback
中被正确初始化了。这不是问题。pFunc
是全局存在的。我怀疑这一点,并在callback
中初始化了pFunc
。但问题仍然存在。 - ChaitanyapFunc
时出现了问题。问题是在从moduleString
中加载module
时发生的。在这行代码中PyImport_Import(modString);
。 - Chaitanya