Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C DLL到Python回调 我有一个VisualC++的DLL。我在DLL中导出了一个SetCallback(函数指针)。 我使用此函数设置python2.7脚本中的回调函数。我遵循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))_Python_C++_C_Dll_Callback - Fatal编程技术网

C DLL到Python回调 我有一个VisualC++的DLL。我在DLL中导出了一个SetCallback(函数指针)。 我使用此函数设置python2.7脚本中的回调函数。我遵循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 DLL到Python回调 我有一个VisualC++的DLL。我在DLL中导出了一个SetCallback(函数指针)。 我使用此函数设置python2.7脚本中的回调函数。我遵循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)),python,c++,c,dll,callback,Python,C++,C,Dll,Callback,在C代码中我有 typedef void (*callback_function)(int); void SetCallback(callback_function aCallback) { py_callback = aCallback; } 当我从C DLL调用这个函数时,比如:py_callback(999),python就崩溃了。 我可能做错了什么?以下间接回调将解决此问题: d = cdll.LoadLibrary(r"myfunctions.dll") callback_t

在C代码中我有

typedef void (*callback_function)(int);
void SetCallback(callback_function aCallback)
{
    py_callback = aCallback;
}
当我从C DLL调用这个函数时,比如:py_callback(999),python就崩溃了。
我可能做错了什么?

以下间接回调将解决此问题:

d = cdll.LoadLibrary(r"myfunctions.dll")
callback_type = CFUNCTYPE(None, c_int )
callback = callback_type(mypy_callback)
d.SetCallback(callback)

发生回调时,
callback\u type
变量是否仍在作用域中?是。回调类型的范围非常广泛。此外,一些看似明显的错误,如原型、参数/返回值不匹配等也被排除在外。我的同事(远程工作)使用C#回调尝试了同一个DLL,结果对他有效。我不懂C#,所以不知道将它与我的python代码进行比较是否有意义。它适合我。我使用VS2008并在
SetCallback
中插入了调用。您发布的代码不完整,因为它从不调用回调,这让我想知道还有什么可能。你能在一个最小的、新创建的C项目中重现这个问题吗?非常感谢,但是请解释一下为什么必须有一个回调变量?故障以何种方式连接到其作用域?好的,ctypes文档中的这条注释解释道:“确保保留对CFUNCTYPE()对象的引用,只要这些对象是从C代码中使用的。ctypes不这样做,如果不这样做,它们可能会被垃圾收集,在进行回调时会导致程序崩溃。”