看流星社区

 找回密码
 注册账号
查看: 1898|回复: 0

ATL字符串类型转换

[复制链接]

该用户从未签到

发表于 2014-6-15 09:09:30 | 显示全部楼层 |阅读模式
ATL提供了宏来进行unicode和MBCS字符串之间的转换,

ATL 提供的转换宏。
A2BSTR         OLE2A              T2A                 W2A
A2COLE         OLE2BSTR      T2BSTR         W2BSTR
A2CT         OLE2CA              T2CA                 W2CA
A2CW         OLE2CT              T2COLE         W2COLE
A2OLE         OLE2CW              T2CW                 W2CT
A2T                 OLE2T              T2OLE                 W2OLE
A2W                OLE2W              T2W                 W2T

使用这些宏的时候还要注意宏 USES_CONVERSION; 的使用,

在调用宏进行转换的函数开头,要加上一句代码

USES_CONVERSION;
不然会有编译错误产生,错误信息如下:

: error C2065: '_lpw' : undeclared identifier
: error C2065: '_convert' : undeclared identifier
: error C2065: '_acp' : undeclared identifier
: error C3861: '_lpw': identifier not found, even with argument-dependent lookup
: error C3861: '_convert': identifier not found, even with argument-dependent lookup
: error C3861: '_lpw': identifier not found, even with argument-dependent lookup
: error C3861: '_convert': identifier not found, even with argument-dependent lookup

为什么会产生这些错误呢?看一下这个宏的定义就了解了:P

#ifndef _DEBUG
#define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa)
#else
#define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)
#endif
这个宏定义了几个要在转换宏中使用的参数,因此没有它,编译错误就产生了。

由于 ATL 转换宏使用栈作为临时空间,这句定义必须加在函数体内。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-29 05:00

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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