调用WinAPI没有不安全的阻止

时间:2014-10-17 10:52:22

标签: rust

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

extern crate libc;

fn main() {
    unsafe {
        libc::funcs::extra::kernel32::GetCurrentProcessId();
    }
}

1 个答案:

答案 0 :(得分:10)

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

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