【问题标题】:Function pointer in python DLLpython DLL中的函数指针
【发布时间】:2020-08-27 11:30:28
【问题描述】:

我正在通过 DLL 文件为 C 代码编写 Python 脚本。 我不知道如何在 Python 中调用回调函数。 我在互联网上找到了很多有用的东西,但我仍然错过了很多。 我在 C 中有以下代码:

typedef uint16(*CALLBACK_1)(DATA *data);
typedef uint16(*CALLBACK_2)(DATA *data);
uint16 end_function(OPT *opt, CALLBACK_1 function_1, CALLBACK_2 function_2, DATA *data);

提前致谢!

【问题讨论】:

标签: python c dll callback function-pointers


【解决方案1】:

我搜索了 Python 中的回调示例。我找到了这个链接:https://gist.github.com/mchung/76d774879245b355e8bff95f9172f9f8,代码如下:

# Example of using callbacks with Python
#
# To run this code
#   1. Copy the content into a file called `callback.py`
#   2. Open Terminal and type: `python /path/to/callback.py`
#   3. Enter

def add(numbers, callback):
    results = []
    for i in numbers:
        results.append(callback(i))
    return results

def add2(number):
    return number + 2

def mul2(number):
    return number * 2

print add([1,2,3,4], add2) #=> [3, 4, 5, 6]
print add([1,2,3,4], mul2) #=> [2, 4, 6, 8]

看看名为add 的函数。它有两个参数:numberscallback。 Numbers 是numbers 的数组,callback 是一个函数。此函数创建一个名为results 的数组作为一个空数组并循环通过numbers,调用callback(i) 并将结果附加到results。如您所见,回调可以是函数内部的called。在最后两行中,两个单独的函数被传递给add,它将在函数内部充当callback

【讨论】:

  • 谢谢!我明白,我不明白的是如何在python中调用这个函数(end_function),因为我应该定义函数(function_1和function_2),我不知道如何在ctypes库中做到这一点。
  • @vex 也许这个链接可以帮助你:journaldev.com/31907/calling-c-functions-from-python
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
相关资源
最近更新 更多