MFC常用字符串处理

MFC下的常用字符串数据类型表示的含义:

L:Long 长  P:Point 指针  C:Const 常量  W:Wchar_t 宽字符  T:TCHAR   STR:String 字符串

在看看MFC下各种数据类型的定义:

复制代码
1 typedef char *LPSTR;
2 typedef const char *LPCSTR;
3
4 typedef wchar_t *LPWSTR;
5 typedef const wchar_t *LPCWSTR;
6 typedef wchar_t WCHAR;
7
8 #ifdef UNICODE
9 typedef LPCWSTR LPCTSTR;
10 typedef WCHAR TCHAR;
11
12 #else
13 typedef LPCSTR LPCTSTR;
14 typedef char TCHAR;
复制代码

MFC下提供的ATL 转换宏:

T2A T2W T2CA T2CW W2A W2CA W2T W2CT A2W A2CW A2T A2CT

T:TCHAR  2:To  C:CONST  A:CHAR(ANSI)  W:WCHAR

先到atlconv.h头文件下看看这些宏的定义,

1.USES_CONVERSION:注意int _convert; (_convert);这种用法是为了屏蔽编译器的警告:未引用的局部变量。。。

复制代码
#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
复制代码
可见,USES_CONVERSION宏定义了一些转换所需要的变量,如_convert。所以使用那些宏的时候必须加上该宏。

2.A2W:这里就用到了USES_CONVERSION宏定义的_convert变量

1 #define A2W(lpa) (
2 ((_lpa = lpa) == NULL) ? NULL : (
3 _convert = (lstrlenA(_lpa)+1),
4 (INT_MAX/2<_convert)? NULL :
5 ATLA2WHELPER((LPWSTR) alloca(_convert*sizeof(WCHAR)), _lpa, _convert, _acp)))
3.ATLA2WHELPER

1 #define ATLA2WHELPER AtlA2WHelper

4.AtlA2WHelper:实际上还是在调用MultiByteToWideChar,即多字节转换为宽字节

复制代码
1 Ret_opt_z_cap(nChars) inline LPWSTR WINAPI AtlA2WHelper(Out_z_cap(nChars) LPWSTR lpw, In_z LPCSTR lpa, In int nChars, In UINT acp) throw()
2 {
3 ATLASSERT(lpa != NULL);
4 ATLASSERT(lpw != NULL);
5 if (lpw == NULL || lpa == NULL)
6 return NULL;
7 *lpw = ‘\0’;
8 int ret = MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars);
9 if(ret == 0)
10 {
11 ATLASSERT(FALSE);
12 return NULL;
13 }
14 return lpw;
15 }
复制代码
5.alloca

#define alloca _alloca
6._alloca:该函数从堆上分配以字节为单位的内存,返回void *

1 void *_alloca(
2 size_t size
3 );

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值