2
這裏是場景:我正在使用ctypes將C DLL加載到Python程序中。我想註冊一個回調函數,以便DLL中的代碼可以在Python中調用一個函數。我可以使用ctypes創建可變參數Python函數的原型,以便DLL可以將此函數作爲回調函數調用嗎?
這是非常棒的,直到我想讓函數變得可變。例如,假設我想要實現的「printf」在Python(爲了便於討論,我也會把它返回一個整數):
def printf(format, *args):
(...)
return 0
我在ctypes的使用CFUNCTYPE工廠創建回調函數指針:
callback_type = CFUNCTYPE(c_int, c_wchar_p)
當然,因爲我只能指定一個輸入參數(格式字符串作爲Unicode字符數組),回調作品但*args
是空的。
那麼,有沒有什麼辦法讓這個工作與ctypes,或者我需要重寫我的C代碼,不需要可變的回調函數?
好的,感謝CFFI的小貼士! –
編輯CFFI的文檔,以C語言編寫的自定義回調爲例,本身回調到Python。 –