USES_CONVERSION;
info.sIP = T2A(m_listDevice.GetItemText(ltemp,0));info.sUserName= T2A(m_listDevice.GetItemText(ltemp,2));
info.sPassWord= T2A(m_listDevice.GetItemText(ltemp,3));
上表中的宏函数,其实非常容易记忆:
2 | 好搞笑的缩写,to 的发音和 2 一样,所以借用来表示“转换为、转换到”的含义。 |
A | ANSI 字符串,也就是 MBCS。 |
W、OLE | 宽字符串,也就是 UNICODE。 |
T | 中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A |
C | const 的缩写 |
USES_CONVERSION是ATL中的一个宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。通俗的说,就是你用了这个宏后,就可以用一系列的字符串转换宏,有OLE到T,T到OLE,OLE到W,W到OLE等等,非常方便。或者说,这个宏会告诉编译器,在紧接的代码中我们要用ole库中代码(如ansi 到unicode 的A2W(...))的转换宏,不加USES_CONVERSION在使用A2W会出错。
要想使用这个宏,因为它是ATL库带的,所以要加上头文件 #include <atlconv.h>。
USES_CONVERSION是ATL中的一个宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。在ATL下使用要包含头文件#include "atlconv.h"
使用USES_CONVERSION一定要小心,它们从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放。如果在一个循环中,这个宏被反复调用几万次,将不可避免的产生stackoverflow。
/------------------------------------------------------------Unicode下CString转char数组---------------------------------------------------------------------/
USES_CONVERSION;
memcpy_s(struDevInfo.struIP,csDeviceIp.GetLength(),T2A(csDeviceIp.GetBuffer()),csDeviceIp.GetLength());
/------------------------------------------------------------Unicode下char* char数组转CString---------------------------------------------------------------------/
char *pChar = "liuxijiao计算机网络";
USES_CONVERSION;
CString str = A2T(pChar);
char *pChar = "liuxijiao计算机网络";
USES_CONVERSION;
CString str = A2W(pChar);