如何解决从外部访问数据指针时,是否可以写入从外部函数调用移交的 Rust 数据指针?
假设我们有一个包含 Rust 数据结构的软件模块,它可以将数字列表作为输入进行特定计算。我们想从外部访问这个模块,例如C++。由于计算是逐个处理的,并且每一步都需要时间,我们想计算到目前为止已经处理了多少个列表。这存储在数据结构的内部变量中。
以例如以下 Rust 源代码:
pub struct Calculator {
result: i32,steps: usize,}
impl Calculator {
pub fn new() -> Self {
Calculator {
result: 0,steps: 0
}
}
pub fn specific_computation(&mut self,numbers: Vec<f32>) {
for number in numbers.into_iter() {
// computation here
self.steps += 1;
}
}
}
现在我们想设计一个外部函数接口来从外部触发这个计算。由于计算需要时间,我们还想知道在计算运行时处理了多少个数字。
#[no_mangle]
pub unsafe extern "C" fn create_calculator(calculator: &mut *mut Calculator) {
*calculator = Box::into_raw(Box::new(Calculator::new()));
}
#[no_mangle]
pub unsafe extern "C" fn do_specific_computation(calculator: *mut Calculator,numbers: *const u32,count: i32) -> f32 {
let numbers = std::slice::from_raw_parts(numbers as *const f32,count as usize);
let calculator = &mut *calculator;
calulator.specific_computation(numbers);
}
是否可以在外部函数调用 calculator
运行时从外部访问指针 specific_computation
以便读取内部变量 calculator.steps
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。