我知道如何将 Red/System
回调传递给 C 函数,但是使用 Red
是否可以实现相同的功能?是否可以在运行时为 Red
函数创建一个 Red/System
包装器并将其传递给 C 函数?
我已经查看了很多绑定(bind)/代码 here和 there ,但还没有找到任何可以解决我的问题的东西。
编辑:
假设我有一个简单的 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/