Ответ 1
Функция ptr::null()
возвращает *const T
, то, что вы хотите, - это функция ptr::null_mut()
, поскольку аргумент вашей функции имеет тип *mut ::libc::c_void
.
Для передачи фактического значения посмотрите на с помощью c_void в 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?
Функция ptr::null()
возвращает *const T
, то, что вы хотите, - это функция ptr::null_mut()
, поскольку аргумент вашей функции имеет тип *mut ::libc::c_void
.
Для передачи фактического значения посмотрите на с помощью c_void в FFI