Приведите объявление функции Rust к внешнему объявлению "C" в Rust

Я работаю с некоторой библиотекой 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, которая интенсивно использует обратный вызов?

Большое спасибо!

0 ответов

Другие вопросы по тегам