2010-01-09 20 views
5

मेरे पास एक SWIG C++ फ़ंक्शन है जो फ़ंक्शन पॉइंटर (WNDPROC) की अपेक्षा करता है, और इसे एक पायथन फ़ंक्शन देना चाहता है जिसे ctypes.WINFUNCTYPE द्वारा लपेटा गया है।पायथन सीटीपीएस कॉलबैक फ़ंक्शन SWIG

ऐसा लगता है कि यह संगत होना चाहिए, लेकिन एसडब्ल्यूआईजी की प्रकार की जांच एक अपवाद फेंकता है क्योंकि यह नहीं जानता कि ctypes.WINFUNCTYPE प्रकार अकसर एक WNDPROC है।

मैं अपने कॉलबैक को SWIG को पास करने के लिए क्या कर सकता हूं ताकि यह समझ सके?

उत्तर

3

मैं एक विंडोज़ मशीन वास्तव में इस जांच करने के लिए नहीं है, लेकिन मैं आपको एक typemap बनाने के लिए बताने के लिए एक WndProc को PyObject आवरण कन्वर्ट करने के लिए बड़ा घूँट करने की जरूरत है लगता है:

// assuming the wrapped object has an attribute "pointer" which contains 
// the numerical address of the WNDPROC 
%typemap(in) WNDPROC { 
    PyObject * addrobj = PyObject_GetAttrString($input, "pointer"); 
    void * ptr = PyLong_AsVoidPt(addrobj); 
    $1 = (WNDPROC)ptr; 
} 
संबंधित मुद्दे