gpt4 book ai didi

function - rust -将用户提供的安全功能包装到不安全的FFI功能中以进行FFI回调

转载 作者:行者123 更新时间:2023-12-03 11:49:03 25 4
gpt4 key购买 nike

我正在尝试将不安全的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com