我有一個Visual C++ DLL。我有一個SetCallback(函數指針)在DLL中導出。 我使用此函數從python2.7腳本設置回調函數。我遵循Python文檔中給出的內容。C DLL到Python回調
from ctypes import *
def mypy_callback(number):
print str(number)
d = cdll.LoadLibrary(r"myfunctions.dll")
callback_type = CFUNCTYPE(None, c_int)
d.SetCallback(callback_type(mypy_callback))
在C代碼中,我有
typedef void (*callback_function)(int);
void SetCallback(callback_function aCallback)
{
py_callback = aCallback;
}
當我打電話從C DLL這個功能,像這樣:py_callback(999),蟒蛇只是崩潰。 我能做什麼錯?
是'callback_type'變量仍範圍回調時會發生什麼? –
是的。 callback_type的範圍非常廣泛。一些看似明顯的錯誤,如原型,參數/返回值不匹配等已被排除。我的同事(遠程工作)使用C#回調嘗試了相同的DLL,並且適用於他。我不知道C#,所以不知道將它與我的Python代碼進行比較是否有意義。 – Kamalakshi
它適合我。我使用VS2008,並將調用插入到'SetCallback'中。你發佈的代碼並不完整,因爲它從來不會調用回調函數,這讓我想知道還有什麼可能。您是否能夠在最小的,新創建的C項目中重現該問題? –