我正在使用Rust编写操作系统,需要直接调用我正在计算的虚拟地址(u32
类型)。我本以为这会相对简单:
let code = virtual_address as (extern "C" fn ());
(code)();
然而,这抱怨说这个强制类型转换是非原始类型。它建议我使用From
trait,但我不知道它如何帮助(虽然我对Rust相对较新,所以可能会漏掉一些东西)。然而,这引发了一个问题,即这种转换是非原始类型的。建议使用
From
特质来解决,但我不确定它是否有所帮助(尽管我对 Rust 还比较陌生,可能忽略了某些细节)。error[E0605]: non-primitive cast: `u32` as `extern "C" fn()`
--> src/main.rs:3:16
|
3 | let code = virtual_address as (extern "C" fn ());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: an `as` expression can only be used to convert between primitive types. Consider using the `From` trait
我可以使用 libcore
中的所有内容,但我还没有移植 std
,因此无法依赖于任何不是 no_std 的东西。
fn()
是一个普通的函数指针。只要在virtual_address
上有一个函数,调用惯例和签名匹配,就可以进行转换并调用函数。 - red75primeunsafe fn
(在好的意义上)的一部分。 - Isaac Woods