1
我正在Rust中编写一个操作系统,需要直接调用我计算的虚拟地址(类型为u32
)。我认为这是相对简单的:从Rust调用一个原始地址
let code = virtual_address as (extern "C" fn());
(code)();
但是,这抱怨演员是非原始的。这表明我使用了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类型_ as f-ptr
的
请注意,我绝对不是不安全事物的专家!如果有人知道更好,请让我知道;那么我可以编辑或删除我的答案! –
Rust在这里没有做任何事情。 'fn()'是一个普通的函数指针。只要'virtual_address'处有一个函数,调用约定和签名匹配,就可以执行转换并调用函数。 – red75prime
真棒,我需要做一些更多的设置,看看这是否真的有效,但它确实编译!非常感谢@LukasKalbertodt。 –