Tôi đang cố gắng gọi các phương thức trong một lớp python từ C++. Phương thức C++ mà từ đó được gọi là một cuộc gọi lại C++.Gọi phương thức python từ C++ (hoặc C) gọi lại
Trong phương pháp này khi tôi đang cố gắng gọi phương thức python, nó đã đưa ra segmentation fault
.
tôi đã tiết kiệm được một thể hiện của chức năng python trong một biến toàn cầu như
// (pFunc is global variable of type PyObject*)
pFunc = PyDict_GetItemString(pDict, "PlxMsgWrapper");
nơi PlxMsgWrapper
là một phương pháp trăn, mà sẽ được sử dụng trong callback.
Trong callback, các đối số được tạo ra như
PyObject* args = PyTuple_Pack(2, PyString_FromString(header.c_str()),
PyString_FromString(payload.c_str()));
Khi tạo
PyObject * pInstance = PyObject_CallObject(pFunc, args);
Trong dòng này cho nó lỗi segmentation. Sau đó phương pháp python thực tế được gọi là
PyObject* recv_msg_func = PyObject_GetAttrString(module, (char *)"recvCallback");
args = PyTuple_Pack(1, pInstance);
PyObject_CallObject(recv_msg_func, args);
Tôi đã cố gắng hết sức để làm sáng tỏ đúng cách.Vui lòng bình luận lại nếu có bất kỳ vấn đề gì. – Chaitanya
Bạn đã kiểm tra xem PyObject_GetAttrString có thực sự trả về một cái gì đó có thể sử dụng không? Có lẽ việc tra cứu không thành công vì một lý do nào đó. Có lẽ 'module' không được khởi tạo đúng cách? – djf
@djf Trên thực tế, bản thân kiểm soát không đến cho đến thời điểm đó. 'PyObject_CallObject (pFunc, args)'. Của nó đâm trong khi gọi phương pháp này chính nó. Để loại bỏ các vấn đề mô-đun, tôi không tải các vấn đề đó trong cuộc gọi lại. – Chaitanya