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

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

2023-1-14 00:50
8445

rt

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 637
活跃值: (6493)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
听起来只需要一个unicode字符转utf-16或者utf-8函数
2023-1-14 03:51
0
雪    币: 1832
活跃值: (5387)
能力值: ( 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
雪    币: 1832
活跃值: (5387)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LYQINGYE #[macro_export] macro_rules!&nbsp;pcwstr&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;($ ...

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

2023-1-14 13:16
0
雪    币: 873
活跃值: (581)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1. windows crate 里有类似 L("") 的宏:f3fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2M7Y4y4Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3L8r3q4@1k6i4y4@1i4K6u0r3N6$3W2F1k6r3!0%4M7#2)9J5c8X3#2S2j5%4u0G2i4K6u0W2N6#2)9J5k6h3S2@1L8h3H3`.
2. encode_utf16,其实也多不了多少开销
3. 直接用 UTF-16 编码的 String,比如 ae3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2M7Y4y4Q4x3V1k6#2N6r3j5I4y4Y4y4@1M7X3W2F1k6#2)9J5c8X3I4S2N6r3g2K6N6q4)9J5c8Y4g2@1k6U0p5$3M7%4c8J5K9h3&6Y4i4K6u0r3
2023-1-14 15:51
2
游客
登录 | 注册 方可回帖
返回