Я работаю с некоторой библиотекой C, и extern "C"
для базовой функции C выглядит следующим образом:
std::option::Option<unsafe extern "C" fn(bdev_io: *mut spdk_bdev_io, success: bool, cb_arg: *mut ::std::os::raw::c_void)>
Базовая библиотека C интенсивно использует обратный вызов, что означает, что мне всегда нужно передавать некоторыеФункция extern "C"
, как указано выше, в качестве аргумента для другого вызова функции extern "C"
.
Я разрабатываю оболочку Rust поверх привязок, сгенерированных bindgen
, и в идеале я хочу передать функцию Rust какАргумент и функцию Rust можно преобразовать в соответствующую функцию extern "C"
соответственно, которую можно использовать в качестве аргумента обратного вызова для другой функции extern "C"
.
Мне интересно, есть ли какая-либо встроенная поддержкаиз Rust позволяет мне это сделать?Если нет, то что может быть хорошим способом реализации оболочки Rust-friendly для библиотеки C, которая интенсивно использует обратный вызов?
Большое спасибо!