曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4958|回复: 0
打印 上一主题 下一主题

A2W、W2A、T2A、T2W 等宏

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-7-21 17:12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果你觉得使用 WideCharToMultiByte,MultiByteToWideChar 等函数比较麻烦---众多的参数,缓冲区的分配与销毁等。那么可以使用 A2W、W2A、T2A、T2W 等宏来代替,它们对上面两个函数进行了封装。在使用这些宏之前,应该包含头文件 atlconv.h ,并在调用上述宏之前先调用 USES_CONVERSION 这个宏。这里要注意两个问题:

1. 这些宏是使用 alloca() 函数进行空间申请的,而不是 new ,宏返回的地址空间是从栈上面申请的,此后不必释放。

2. 不要在一个函数的循环体中使用 A2W 等字符转换的宏,这有可能引起栈溢出,因为栈空间是比较有限的,比如下面的代码是一种错误的调用方法:
[C++] 纯文本查看 复制代码
#include <atlconv.h>
void func()
{
    while(true)
    {
        {
            USES_CONVERSION;
            testFunc(A2W("abc"));
        }
    }
}


使用 A2W 这些宏有利有弊,何时直接使用 API 函数或使用宏,应视程序的具体环境而定。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 12:22 , Processed in 0.076204 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表