2014-10-17 4 views
4

방금 ​​Rust를 배우기 시작했고 안전하지 않은 WinAPI 함수를 호출 할 수 있는지 여부를 알고 싶습니다. 그들은 외부 C 라이브러리의 기능에 직접 바인딩이기 때문에안전하지 않은 블록없이 WinAPI를 호출하십시오.

extern crate libc; 

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

답변

10

아니, 그냥 libc 상자의 다른 거의 모든처럼, 불가능하다. GetCurrentProcessId()과 같은 함수에서는 명확하지 않을 수 있지만 이러한 함수 은 원시 포인터와 null로 끝나는 문자열을 취하고 반환하는 많은 함수가 있으므로 안전하지 않습니다.입니다.

unsafe없이 호출하려면 다른 C 라이브러리와 마찬가지로 적절한 안전 래퍼가 있어야합니다. 내가 아는 한 아직 그 래퍼는 없다. 그러나 필요한 WinAPI 함수의 하위 세트 만 작성할 수 있습니다. 너무 어렵지는 않습니다. 외부 라이브러리 herehere에 대한 안전한 래퍼 작성 방법에 대한 자세한 내용을 확인할 수 있습니다.