나는 녹스에 OS를 쓰고 있으며 계산중인 가상 주소 (u32
)를 직접 호출해야합니다. 나는 이것이 상대적으로 단순 할 것이라고 예상했다 :녹 주소에서 원시 주소로 전화
let code = virtual_address as (extern "C" fn());
(code)();
그러나 이것은 캐스트가 비 프리미티브 (non-primitive)라고 불평한다. 그것은 내가 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
를 이식하지 않은 등 (허용되지 않는 유형 _ as f-ptr
의
저는 안전하지 않은 것에 대해 전문가가 아닙니다. 누군가가 잘 아는 경우 알려주십시오. 그러면 내 대답을 편집하거나 삭제할 수 있습니다! –
녹이 아무것도 공상을 여기하지 않습니다. 'fn()'은 일반 함수 포인터입니다. 'virtual_address'에 호출 규칙과 서명이 일치하는 한 캐스트를 수행하고 함수를 호출하는 것이 좋습니다. – red75prime
굉장한,이 실제로 작동하는지 확인하려면 좀 더 설치해야하지만 컴파일됩니다! 대단히 감사합니다 @ LukasKalbertodt. –