5
我有一個SWIG C++函數需要一個函數指針(WNDPROC),並且想給它一個已被ctypes.WINFUNCTYPE包裝的Python函數。Python ctypes對SWIG的回調函數
在我看來,這應該是兼容的,但SWIG的類型檢查會引發異常,因爲它不知道ctypes.WINFUNCTYPE類型實際上是WNDPROC。
我可以做些什麼來將我的回調傳遞給SWIG,以便它瞭解它?
我有一個SWIG C++函數需要一個函數指針(WNDPROC),並且想給它一個已被ctypes.WINFUNCTYPE包裝的Python函數。Python ctypes對SWIG的回調函數
在我看來,這應該是兼容的,但SWIG的類型檢查會引發異常,因爲它不知道ctypes.WINFUNCTYPE類型實際上是WNDPROC。
我可以做些什麼來將我的回調傳遞給SWIG,以便它瞭解它?
我沒有Windows機器真能遏制這一點,但我認爲你需要創建一個類型映射告訴痛飲如何將的PyObject包裝轉換成WNDPROC:
// 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;
}