gpt4 book ai didi

rust - 如何创建 Rust 回调函数以传递给 FFI 函数?

转载 作者:行者123 更新时间:2023-11-29 08:31:14 26 4
gpt4 key购买 nike

这是 C API 的样子

void mosquitto_connect_callback_set(struct mosquitto *mosq, void (*on_connect)(struct mosquitto *, void *, int));

rust-bindgen 已经为我生成了这个

pub fn mosquitto_connect_callback_set(
mosq: *mut Struct_mosquitto,
on_connect: ::std::option::Option<
extern "C" fn(
arg1: *mut Struct_mosquitto,
arg2: *mut ::libc::c_void,
arg3: ::libc::c_int,
) -> (),
>,
)

如何创建 Rust 回调函数以传递给上述 Rust 绑定(bind)中的 on_connect 参数?

最佳答案

The Rust Programming Language第一版,有一个关于 FFI 的部分,标题为 Callbacks from C code to Rust functions .

那里的例子是

extern "C" fn callback(a: i32) {
println!("I'm called from C with value {0}", a);
}

#[link(name = "extlib")]
extern "C" {
fn register_callback(cb: extern "C" fn(i32)) -> i32;
fn trigger_callback();
}

fn main() {
unsafe {
register_callback(callback);
trigger_callback(); // Triggers the callback
}
}

对于您的具体情况,您已经知道您需要的具体功能类型:

extern "C" fn mycallback(
arg1: *mut Struct_mosquitto,
arg2: *mut ::libc::c_void,
arg3: ::libc::c_int,
) -> () {
println!("I'm in Rust!");
}

然后像这样使用它

mosquitto_connect_callback_set(mosq, Some(mycallback));

关于rust - 如何创建 Rust 回调函数以传递给 FFI 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com