我使用的是Windows crate 中的IDesktopWallpaper::SetWallpaper方法.此方法的第二个参数是PCWSTR(指针),指向要设置为墙纸的图像的完整路径.问题是PCWSTR对象的类型应该是*const u16,而不是*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)};

推荐答案

当谈到字符串时,Rust和Windows不可能有更大的分歧.当在Windows上使用Rust时,总是会涉及到转换,你最好的希望是一个能为你做这件事的 crate .

windows机箱不仅为Windows的API表面提供了Rust映射,它还包含一个小库,用于解决使用Rust编程Windows时的常见问题,其中包括字符串处理.在字符串处理方面花了lot个心思,结果可能看起来有些令人沮丧:All个字符串常量可以表示为HSTRING个实例.

因此,HSTRING是Rust for Windows中字符串转换的轴心点.它的实现有From个Rust字符串类型的特征实现(我相信是全部),HSTRING个其他Windows字符串类型的From个实现.

在这种情况下,如果pathPath类型,您可以简单地从它构造一个HSTRING,并通过引用传递它.其他所有事情都是由于隐式From个特征调用(即From<&HSTRING> for PCWSTR个)而发生的:

unsafe { desktop.SetWallpaper(None, &HSTRING::from(path.as_os_str())) };

Rust相关问答推荐

在‘await’点上使用‘std::同步::Mutex’是否总是会导致僵局?

使用Rust s serde_json对混合数据类型进行优化'

为什么类型需要在这个代码中手动指定,在rust?

访问Rust中的隐藏变量

展开枚举变量并返回所属值或引用

try 创建随机数以常量

如何在Rust中基于字符串 Select struct ?

解析程序无法在Cargo 发布中 Select 依赖版本

是否提供Bundle 在可执行文件中的warp中的静态文件?

什么是`&;[][..]`铁 rust 里的刻薄?

tokio::spawn 有和没有异步块

try 从标准输入获取用户名和密码并删除 \r\n

在没有任何同步的情况下以非原子方式更新由宽松原子操作 Select 的值是否安全?

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

返回优化后的标题:返回异步块的闭包的类型擦除

如何将 C++ 程序链接到 Rust 程序,然后将该 Rust 程序链接回 C++ 程序? (cpp -> rust -> cpp)

为什么我不能克隆可克隆构造函数的Vec?

使用 rust 在 google cloud run (docker) 中访问环境变量的适当方法

类型组的通用枚举

守卫如何影响匹配语句?