调用WinAPI没有不安全的阻止

Emi*_*ttt 5 rust

我刚开始学习Rust,想知道是否可以在不安全的情况下调用WinAPI函数?

extern crate libc;

fn main() {
    unsafe {
        libc::funcs::extra::kernel32::GetCurrentProcessId();
    }
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*eev 10

不,这是不可能的,因为它们是外部C库中函数的直接绑定,就像libccrate中的几乎所有其他函数一样.函数可能并不明显GetCurrentProcessId(),但是这些函数不安全的,因为有很多函数接受并返回原始指针和以null结尾的字符串.

为了在没有unsafe应该有适当的安全包装的情况下调用它们,就像任何其他C库一样.据我所知,还没有这样的包装.但是你可以只为你需要的WinAPI函数子集编写一个,它应该不会太难.您可以在此处此处找到有关如何为外部库编写安全包装的更多详细信息.