我正在尝试将不安全的FFI函数包装到“更安全”的函数中。
目前,我的问题基本上是这样的:
fn do_ffi_safe(arg1: u16, callback: fn(result: u16) -> bool) {
//I have to wrap callback into a unsafe extern "C" fn here to use as a callback
do_ffi_unsafe(arg1: u16, Some(//And use the unsafe callback here));
}
unsafe extern "C" do_ffi_unsafe(arg1: u16, Option<unsafe extern "C" fn(result: u16) -> bool);
如何将安全函数包装到函数体内的(可能是匿名的)函数中?
我可以使用瓶盖吗?如果是,怎么办?
最佳答案
您可以将不安全的代码包装在安全的函数中。实际上,a section in the Rust book可以告诉您确切的操作方法。
以下是从书中复制的示例,为简洁起见进行了重述:
use std::slice;
fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
let len = slice.len();
let ptr = slice.as_mut_ptr();
assert!(mid <= len);
unsafe {
(slice::from_raw_parts_mut(ptr, mid),
slice::from_raw_parts_mut(ptr.offset(mid as isize), len - mid))
}
}
为了将来引用,Rust团队提供了我认为是业内最好的文档,可以回答此类问题。我不能太过强调新来者应该最大程度地使用它。这是一种罕见且极为有用的 gem 。
关于function - rust -将用户提供的安全功能包装到不安全的FFI功能中以进行FFI回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61280518/