我有一个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项目中重现该问题? –