#unicode #ansi #multi-byte #windows

无 std windy

支持 AString (ANSI 字符串) 和 WString (Unicode 字符串) 的 Windows 字符串库

6 个版本

0.2.0 2021年7月24日
0.1.4 2021年1月12日
0.1.1 2020年12月16日

#97 in Windows API

每月 33 次下载
用于 2 crates

MIT/Apache

47KB
1K SLoC

Windy

crates.io docs.rs

支持 AString (ANSI 字符串) 和 WString (Unicode 字符串) 的 Windows 字符串库。

特性

  • ANSI 字符串(AString)
  • 宽字符串(WString)
  • AnsiString(ANSI_STRING)
  • UnicodeString(UNICODE_STRING)
  • AString、WString 和 String 之间的相互转换。
  • 支持 no_std
  • 宏支持

安装

将以下行添加到您的 Cargo.toml 文件中

[dependencies]
windy = "0.2.0"

示例

解析 cmd.exe 输出的示例。

use windy::AString;
use std::process::Command;

fn main() {
    let o = Command::new("cmd")
        .args(&["/c", "ThisCommandDoesNotExist"])
        .output().unwrap();
    let (stdout, stderr) = unsafe {
        (
            AString::new_unchecked(o.stdout),
            AString::new_unchecked(o.stderr)
        )
    };
    println!("stdout: {:?}", stdout);
    println!("stderr: {:?}", stderr);
}

支持 no_std

如果您不想使用 std,请使用 --no-default-features

在 no_std 下,AString 和 WString 不可用。

宏支持

windy-macros 在编译时将 UTF-8 字符串转换为 WString 或 AString。

[dependencies]
windy = "0.2.0"
windy-macros = "0.1.1"

示例

use windy::WStr;
use windy_macros::wstr;

#[allow(non_snake_case)]
#[link(name = "user32")]
extern "system" {
    pub fn MessageBoxW(
        hWnd: *mut c_void,
        lpText: *const u16,
        lpCaption: *const u16,
        uType: u32,
    ) -> i32;
}

fn main() {
    let text: &WStr = wstr!("World");
    let caption: &WStr = wstr!("CaptionW");
    unsafe {
        MessageBoxW(0 as _, text.as_ptr(), caption.as_ptr(), 0);
    }
}

许可证

本软件根据 MIT 或 Apache-2.0 许可证发布,请参阅 LICENSE-MIT 或 LICENSE-APACHE。

无运行时依赖