python - C DLL 到 Python 回调

标签 python c++ c dll callback

我有一个 Visual C++ 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代码中

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)

关于python - C DLL 到 Python 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21011620/

相关文章:

python - 如何在pytorch中使用SGD成功训练简单的线性回归模型?

python - Django 2.0.7 URL app_name 如何工作

python - 是否有一个 Python 模块可以在没有 MediaWiki 的情况下解析 Wikipedia 文章?

C语言中在最后位置插入节点的代码

c - 需要帮助理解二叉搜索树中的父节点

c - 这也是 C 语言中的灵活数组结构成员吗?

c++ - 用于 C++ 的 Python API

c++ - cudaMemCpy 返回 cudaInvalidData

c++ - 如何防止从 char 数组到 bool 的隐式转换

c++ - CUDA:统一内存,使用数组