Rust FFI。转换为void指针

时间:2015-07-08 19:40:13

标签: rust ffi

我有一个原型如下的功能

//opaque struct
struct mosquitto;

struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *obj);

在我的c代码中,我将其称为如下。

struct mosquitto *m = mosquitto_new(buf, true, NULL);

现在我想在我的防锈代码中调用上面的API。 rust-bindgen产生以下结合

pub enum Struct_mosquitto { }
pub fn mosquitto_new(id: *const ::libc::c_char, clean_session: u8, obj: *mut ::libc::c_void) -> *mut Struct_mosquitto;

当我试图调用上面的API时,我在第三个参数上遇到了不匹配。

let s = CString::new("ravi").unwrap();
let mqtt = mosquitto::mosquitto_new(s.as_ptr(), 1, ptr::null());

如何将NULL传递给* mut c_void?

奖金问题:如何将生锈结构传递给* mut c_void?

1 个答案:

答案 0 :(得分:17)

*const T函数返回*mut ::libc::c_void,你想要的是ptr::null_mut()函数,因为函数的参数是CASE类型。

要传递实际值,请查看Working with c_void in an FFI

的答案