2010-01-09 34 views
5

Tôi có hàm SWIG C++ dự kiến ​​một con trỏ hàm (WNDPROC), và muốn cho nó một hàm Python đã được bao bọc bởi ctypes.WINFUNCTYPE.Python ctypes chức năng gọi lại tới SWIG

Dường như với tôi rằng điều này phải tương thích, nhưng kiểm tra loại SWIG ném một ngoại lệ bởi vì nó không biết rằng các loại ctypes.WINFUNCTYPE là acctually một WNDPROC.

Tôi có thể làm gì để chuyển cuộc gọi lại của mình sang SWIG để nó hiểu nó?

Trả lời

3

Tôi không có một máy cửa sổ để thực sự kiểm tra này, nhưng tôi nghĩ rằng bạn cần để tạo ra một typemap nói uống một lân làm thế nào để chuyển đổi các wrapper PyObject đến một 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; 
} 
Các vấn đề liên quan