我正在使用IDesktopWallpaper::SetWallpaperwindows crate 中的方法。此方法的第二個引數是一個PCWSTR(指標)指向要設定為墻紙的影像的完整路徑。問題是該PCWSTR物件的型別是*const u16not *const String。如何PCWSTR從路徑/字串中獲取物件?
let path = "Path_to_image.jpg".to_string();
let ptr = &path as *const String;
let wallpaper = PCWSTR::from_raw(ptr);
// ^^^ expected raw pointer `*const u16`
// found raw pointer `*const String`
unsafe { desktop.SetWallpaper(None, wallpaper)};
uj5u.com熱心網友回復:
當談到字串時,Rust 和 Windows 不可能有更多的分歧。在 Windows 上使用 Rust 時總是會涉及到轉換,而你所能期望的最好的就是為你做這件事的 crate。
windows crate 不僅為 Windows 的 API 表面提供 Rust 映射,它還包含一個小型庫,用于解決使用 Rust 編程 Windows 時的常見問題,其中包括字串處理。對字串處理進行了很多思考,結果似乎有些虎頭蛇尾:所有字串常量都可以表示為HSTRING實體。
因此,HSTRING是 Rust for Windows 中字串轉換的關鍵點。它的From實作對 Rust 字串型別(我相信全部)具有一系列特征實作,From以及所有其他 Windows 字串型別的實作HSTRING。
在這種情況下,如果path是型別Path,您可以簡單地HSTRING從它構造一個,并通過參考傳遞它。From由于隱式特征呼叫(即) ,其他所有事情都會發生From<&HSTRING> for PCWSTR:
unsafe { desktop.SetWallpaper(None, &HSTRING::from(path.as_os_str())) };
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/522548.html
