Я пытаюсь вызвать методы в классе python из С++. Метод С++, из которого он вызван, является обратным вызовом С++.
В этом методе, когда я пытаюсь вызвать метод 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);