से पाइथन विधि को कॉल करना मैं सी ++ से एक पायथन कक्षा में विधियों को कॉल करने का प्रयास कर रहा हूं। सी ++ विधि जिसे इसे कहा जाता है वह एक सी ++ कॉलबैक है।सी ++ (या सी) कॉलबैक
इस विधि के भीतर जब मैं पायथन विधि को कॉल करने का प्रयास कर रहा हूं, तो यह segmentation fault
दे रहा था।
मैं की तरह
// (pFunc is global variable of type PyObject*)
pFunc = PyDict_GetItemString(pDict, "PlxMsgWrapper");
जहां 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
@ डीजेएफ दरअसल, नियंत्रण उस बिंदु तक नहीं आ रहा है। 'PyObject_CallObject (pFunc, args)'। इस विधि को स्वयं कॉल करते समय यह दुर्घटनाग्रस्त हो रहा है। मॉड्यूल की समस्याओं से छुटकारा पाने के लिए, मैं इसे कॉलबैक में लोड नहीं कर रहा हूं। – Chaitanya