我開始學習 Rust WinApi。我需要使用 winapi crate 遍歷所有網路計算機。這是我的代碼:
fn enumerate_network_computers(lpnr: LPNETRESOURCEW) -> u32 {
unsafe {
let mut h_enum: HANDLE = 0 as PVOID;
let mut cb_entries: DWORD = 9999;
let mut cb_buffer: DWORD = 16384;
let lpnr_local: LPVOID = GlobalAlloc(GPTR, cb_buffer.try_into().unwrap());
let mut dw_err = WNetOpenEnumW(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnr, &mut h_enum);
if dw_err != NO_ERROR {
return dw_err;
}
loop {
dw_err = WNetEnumResourceW(h_enum, &mut cb_entries, lpnr_local, &mut cb_buffer);
println!("{:#?}", lpnr_local);
if dw_err == ERROR_NO_MORE_ITEMS {
break;
}
}
dw_err
}
}
所以,我的代碼很好用!但我不能LPVOID強制NETRESOURCEW迭代結構......我已經嘗試過.try_into(), lpnr_local as NETRESOURCEW. 但我得到錯誤:該特征From<*mut winapi::ctypes::c_void>未實作NETRESOURCEW
uj5u.com熱心網友回復:
LPVOID是一個指標,但NETRESOURCEW不是,所以你不能在它們之間轉換。請記住,前綴LP代表長指標。
所以嘗試鑄造lpnr_local as LPNETRESOURCEW。
或者,您可以避免 Microsoft 主義并執行lpnr_local as *const NETRESOURCEW.
請注意,為了訪問該結構的成員,您必須取消參考指標。我會做這樣的事情:
let nr = &*(lpnr_local as *const NETRESOURCEW);
println!("{:#?}", nr);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512748.html
標籤:温纳皮联网锈
