rust FFI。转换为 void 指针

标签 rust ffi

我有一个原型(prototype)如下的函数

//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);

现在我想在我的 Rust 代码中调用上面的 API。 rust-bindgen 生成了以下绑定(bind)

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?

奖励问题:如何将 rust 结构传递给 *mut c_void ?

最佳答案

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

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

关于 rust FFI。转换为 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302185/

相关文章:

rust - 本地让喜欢在 caml 中

Rust solana 构建错误 : no such subcommand: +bpf

c - 如何在 Rust 中正确包装 C 函数指针?

c - Haskell FFI - 你能从 Haskell 数据结构中获取 C 指针吗?

ruby - 如何在以结构为参数的 Ruby FFI 方法中包装函数?

rust - 平衡支架时的生命周期问题

macros - 如何将空白/空参数传递给 Rust 中的宏?

rust - 如何制作特征别名?

ruby 弦使用rust 并再次使用rust

haskell - LIRC 与 Haskell 的接口(interface)