2009-01-29 50 views

回答

9

這是ctypes的棘手,因爲ctypes的函數指針不執行用於設置其他指針.value財產。相反,使用c_void_p函數將您的回調函數和外部函數指針強制轉換爲void *。如圖所示將函數指針設置爲void *後,C可以調用您的Python函數,並且可以將該函數作爲函數指針進行檢索,並用普通的ctypes調用進行調用。

from ctypes import * 

liblibrary = cdll.LoadLibrary('liblibrary.so') 

def py_library_hook(strings, n): 
    return 0 

# First argument to CFUNCTYPE is the return type: 
LIBRARY_HOOK_FUNC = CFUNCTYPE(c_int, POINTER(c_char_p), c_int) 
hook = LIBRARY_HOOK_FUNC(py_library_Hook) 
ptr = c_void_p.in_dll(liblibrary, 'library_hook') 
ptr.value = cast(hook, c_void_p).value 
相關問題