这就是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绑定中的on_connect参数?
发布于 2015-07-16 20:19:49
http://doc.rust-lang.org/stable/book/,第一版,有一个关于FFI的章节,名为C代码对锈蚀函数的回调。
下面的例子是
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));https://stackoverflow.com/questions/31463426
复制相似问题