red - 将 Red 函数指针传递给 C

标签 red red-system

我知道如何将 Red/System 回调传递给 C 函数,但是使用 Red 是否可以实现相同的功能?是否可以在运行时为 Red 函数创建一个 Red/System 包装器并将其传递给 C 函数?

我已经查看了很多绑定(bind)/代码 herethere ,但还没有找到任何可以解决我的问题的东西。

编辑:
假设我有一个简单的 Red 函数:

add-numbers: func[a b][a + b]

我有一个 Red/System 函数别名:

callback!: alias function! [a [integer!] b [integer!] return: [integer!]]

是否可以使用 Red/System 包装器以某种方式将上述 add-numbers 函数转换为 callback!

最佳答案

您可以使用 #call 从 Red/System 调用 Red 函数!指示。只有简单的参数类型会为您自动转换(例如数字和逻辑值),对于其余的,您需要使用 Red 运行时 API 来构造函数的参数并将其放置在 Red 堆栈上,并最终检索返回值。

使用#call,您可以在 Red/System 中编写包装函数,这些函数可以作为回调传递给 C 函数。这是an example来自 LibRed 源代码的此类包装器。

关于red - 将 Red 函数指针传递给 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47894797/

相关文章:

linux - 无法在 Linux 上运行 Red 语言脚本

red - 如何从 R/S 向 block 追加数据?

红色:*** 错误:单词没有值(value)!调用外部库函数时

rebol - Red/Rebol 函数如何通过值或引用传递参数?

reflection - 哪些情况难以区分代码和数据?

red - 从 Red/System 访问运行时函数

pointers - 如何创建一个红色/系统绑定(bind)到一个函数,该函数需要一个指向指针的指针?