首页
社区
课程
招聘
[讨论]rust字符是32位,.如何调用Windows API A版和W版函数?
发表于: 2023-1-14 00:50 8148

[讨论]rust字符是32位,.如何调用Windows API A版和W版函数?

2023-1-14 00:50
8148

rt

比如getmodulehandleA和getmodulehandleW, 用rust的32位char型字符串无法兼容吧?如何在rust中定义A和W版字符串?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 638
活跃值: (6477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
听起来只需要一个unicode字符转utf-16或者utf-8函数
2023-1-14 03:51
0
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
wx_Aure__ 听起来只需要一个unicode字符转utf-16或者utf-8函数

当然需要, 但是所有字符串都用函数转换, 不仅效率低性能差白费CPU, 也不像话. 要知道所有API全部是A或W字符串

所以起码像“L”这样的宏更好. 如果直接能定义ascii字符, 更更好. 否则这语言就趿拉了(刚出来不完善还说得过去, 这都多少年了, 连基本字符串都不支持的话, 还指望和C PK运行速度)

最后于 2023-1-14 08:14 被PEDIY编辑 ,原因:
2023-1-14 07:55
1
雪    币: 54
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
#[macro_export]
macro_rules! pcwstr {
    ($str: expr) => {
        windows::core::PCWSTR::from_raw(
            $str.encode_utf16()
                .chain([0])
                .collect::<Vec<u16>>()
                .as_ptr(),
        )
    };
}


2023-1-14 12:38
1
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LYQINGYE #[macro_export] macro_rules!&nbsp;pcwstr&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;($ ...

先赞了. 不能让好意帮忙者还损失一枚雪币, heha~

2023-1-14 13:16
0
雪    币: 873
活跃值: (531)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1. windows crate 里有类似 L("") 的宏:https://docs.rs/windows/latest/windows/macro.w.html
2. encode_utf16,其实也多不了多少开销
3. 直接用 UTF-16 编码的 String,比如 https://docs.rs/utf16string/latest/utf16string/
2023-1-14 15:51
2
游客
登录 | 注册 方可回帖
返回
//