के साथ एक सी पॉइंटर पास करना मैं पाइथन/सी एपीआई में नया हूं ... मैं अपने सी प्रोग्राम में नई कार्यक्षमता जोड़ने की कोशिश कर रहा हूं, जिसमें मैं इसमें पाइथन एम्बेड कर सकता हूं और साथ ही कार्यक्षमता बढ़ा सकता हूं ताकि एम्बेडेड दुभाषिया एक स्क्रिप्ट निष्पादित कर सकता है जो मेरे सी प्रोग्राम के हिस्से के रूप में लिखे गए एक विस्तारित पायथन मॉड्यूल के साथ बातचीत करेगा। मेरे सी प्रोग्राम में वैश्विक चर नहीं हैं। मैं चीजों को इस तरह रखना चाहता हूं; उसी समय पाइथन के लिए सी कार्यक्षमता का पर्दाफाश करने के लिए, यह प्रोग्राम की स्थिति तक पहुंचने के लिए वैश्विक चर तक पहुंच की आवश्यकता पर विस्तारित सी फ़ंक्शन दिखाई देता है। मैं इसके आसपास कैसे पहुंचू?पायथन/सी एपीआई
उदा। यहाँ कैसे मैं कहाँ PYINTERFACE_Initialize से मुख्य
void PYINTERFACE_Initialize(State *ptr, FILE *scriptFile, const char* scriptFileName)
{
Py_Initialize();
PyObject *module = Py_InitModule("CInterface", CInterfaceMethods);
if (PyRun_SimpleFileEx(scriptFile, scriptFileName, 1) != 0)
{
printf("PYINTERFACE script execution failed!\n");
}
**//ADD State *ptr TO module**
}
कहा जाता है embedding पर योजना है यहाँ विस्तारित समारोह है:
static PyObject*
CInterface_GetStateInfo(PyObject *self, PyObject *args)
{
const char *printStr;
double stateInfo;
State *ptr;
if(!PyArg_ParseTuple(args, "s", &printStr))
{
return NULL;
}
printf("Received %s\n", printStr);
**//RETRIEVE State *ptr FROM self**
stateInfo = ptr->info;
return Py_BuildValue("d", currentTime);
}
* ptr चारों ओर राज्य पारित करने के लिए स्पष्ट तरीका यह है? मैं निश्चित रूप से पाइथन में आंतरिक स्थिति का पर्दाफाश करने की आवश्यकता को नहीं देखता हूं। मैंने कैप्सूल का उपयोग करने के बारे में सोचा, लेकिन ऐसा लगता है कि इस तरह के व्यवहार का समर्थन करने के लिए कैप्सूल का इरादा नहीं है।
अग्रिम धन्यवाद! http://docs.python.org/c-api/capsule.html
मूल रूप से PyCObject: http://docs.python.org/c-api/cobject.html
आप केवल अजगर 2.7 का उपयोग करना चाहते हैं, तो आप एक PyCapsule उपयोग कर सकते हैं: वी