我已经查看了锈外部函数接口,并成功(并且愉快地)可以从我的锈色代码中调用ac库.
但是,我似乎无法在c代码范围内找到有关如何注册回调以调用生锈代码的任何细节.
这甚至可能吗?
作为"为什么你会这样做?"的理由; 具体来说,我正在考虑在生锈应用程序中嵌入lua或python,并为在嵌入式运行时上运行的脚本公开脚本api.
调用这些将是以下内容:
所有这些步骤除了粗体之外我已经设法工作,并且我使用调度程序完成了一些简单的工作,C调用将"运行我"命令转储到队列中,当控制返回到生锈范围,应用程序查询队列并运行其中的命令...
...但是从脚本方面来说有点尴尬,因为它意味着多个嵌套的异步回调,而脚本层的重点是简化需要进入脚本层的代码.
Mat*_*247 11
是的,您可以将一个回调函数从Rust传递给C并在那里调用它.要知道的主要事情是你必须使用extern"C"属性定义函数.
未经测试的示例(此处没有Rust编译器):
锈边:
extern "C" fn callback(a:i32) {
println!("I'm called from C with value {0}", a);
}
#[link(name = "mylib")]
extern {
fn register_callback(cb: extern "C" fn(i32)) -> i32;
}
fn main() {
unsafe {
register_callback(callback);
}
...
}
Run Code Online (Sandbox Code Playgroud)
C方:
typedef void (*rust_callback)(int32_t);
rust_callback cb;
int32_t register_callback(rust_callback callback) {
cb = callback;
return 1;
}
void thread() {
// do sth
cb(xyz);
}
Run Code Online (Sandbox Code Playgroud)