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。 –