C++에서 파이썬 클래스의 메서드를 호출하려고합니다. 이것이 호출되는 C++ 메소드는 C++ 콜백입니다.C++ (또는 C) 콜백에서 파이썬 메서드 호출
파이썬 메서드를 호출 할 때이 메서드 내에서 segmentation fault
을 제공하고있었습니다.
난 PlxMsgWrapper
콜백에 사용될 파이썬 방법이다
// (pFunc is global variable of type PyObject*)
pFunc = PyDict_GetItemString(pDict, "PlxMsgWrapper");
같은 전역 변수 파이썬 함수의 인스턴스를 저장했다. 그 세분화 결함이주는 라인에
PyObject * pInstance = PyObject_CallObject(pFunc, args);
를 만들 때 콜백
는 인수PyObject* args = PyTuple_Pack(2, PyString_FromString(header.c_str()),
PyString_FromString(payload.c_str()));
으로 생성된다. 이 후 실제 파이썬 방법은
라고한다PyObject* recv_msg_func = PyObject_GetAttrString(module, (char *)"recvCallback");
args = PyTuple_Pack(1, pInstance);
PyObject_CallObject(recv_msg_func, args);
나는 올바르게 설명하기 위해 최선을 다했습니다.문제가 있으면 다시 의견을 말하십시오. – Chaitanya
PyObject_GetAttrString이 실제로 사용할 수있는 것을 반환하는지 확인 했습니까? 어쩌면 조회가 어떤 이유로 실패했습니다. 아마도 '모듈'이 올바르게 초기화되지 않았습니까? – djf
@djf 사실, 컨트롤 자체는 그 시점까지 오지 않습니다. 'PyObject_CallObject (pFunc, args)'를 참조하십시오. 이 메서드 자체를 호출하는 동안 충돌이 발생합니다. 모듈 문제를 없애기 위해 콜백에로드하지 않습니다. – Chaitanya