Windows中使用的Unicode和ANSI函数

本文详细介绍了Windows中Unicode和ANSI函数的使用,包括C运行时库的Unicode和ANSI版本,以及安全的字符串函数。讨论了Windows API中Unicode和ANSI函数的转换过程,强调了使用安全字符串函数的重要性,并提供了转换字符串的建议和方法,如MultiByteToWideChar和WideCharToMultiByte函数。此外,还给出了使用字符和字符串的实践指南,包括避免缓冲区溢出和选择适当的字符串比较方法。
摘要由CSDN通过智能技术生成

Windows 给出的带有字符串参数的函数都有两个相同版本的函数与之对应,一个是 Unicode 版本,一个是 ANSI 版本,分别以 FunctionNameW 和 FunctionNameA 表示,FunctionName 实际上是一个宏定义。

用户在使用 FunctionNameA 版本的 ANSI 函数时,WIndows 内部会分配一块内存来将 ANSI 字符串转换为 Unicode 字符串,然后再调用 FunctionNameW 版本的 Unicode 函数,FunctionNameW 返回时,FunctionNameA 将释放申请的内存,又会将 Unicode 字符串转换回 ANSI 字符串。所以使用 ANSI 版本的例程会有性能损失。

某些 WIndows API 函数没有 Unicode 版本,如 WinExec 和 OpenFile,这些函数的存在是为了和之前的16位程序兼容,现在可以完成抛开这些函数而使用新的其它的 Unicode 函数。

所有 COM 接口方法必须使用 Unicode 字符串,因为 COM 通常用于不同组件之间的通信。

编译器会将所有的资源编译为 Unicode,如果应用程序没有定义 UNICODE 宏,系统会执行内部转换,将 Unicode 资源转换为 ANSI 资源。

C 运行时库使用的 Unicode 和 ANSI 函数

同 Windows 函数一样,C 运行时库也有 Unicode 和 ANSI 两个版本的函数,但是不象 Windows 函数,ANSI 版本的函数不会在内部将字符或字符串转换为 Unicode。

C 运行时库使用 _UNICODE 定义 Unicode 宏,常用 C 运行时字符操作库的定义可以参考 tch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值