USES_CONVERSION W2A

https://blog.csdn.net/thanklife/article/details/70208841

USES_CONVERSION的使用和注意

1. 使用ATL的W2A和A2W宏必须使用USES_CONVERSION
2. USES_CONVERSION是用来转换类型的,比如我们很常见的问题:
    在Socket编程时候,我们的IP地址从界面上输进去一般都使用CString类型的,可是在SOCKADDR_IN中的inet_addr却是const char *我们就不能直接用CString来用。我们就可以使用T2A()宏了。
    SOCKADDR_IN localaddr;   
    CString m_IP = L"192.168.1.2";
    USES_CONVERSION;
    localaddr.sin_family = AF_INET;
    localaddr.sin_addr.S_un.S_addr = inet_addr(T2A(m_IP));
 
3. 当然使用USES_CONVERSION也是要注意一个很重要的问题。
USES_CONVERSION它是在堆栈上分配空间的,也就是说你在你使用的函数未结束就不会被释放掉。
所有要注意不要在一个函数中用while循环执行它,不然栈空间就马上会分配完(栈空间一般只有2M,很小)。

4. USES_CONVERSION是ATL中的一个宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。在ATL下使用要包含头文件#include "atlconv.h"

5. 使用USES_CONVERSION一定要小心,它们从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放。如果在一个循环中,这个宏被反复调用几万次,将不可避免的产生stackoverflow。

 

posted @ 2018-11-24 00:15  kuaqi  阅读(550)  评论(0编辑  收藏  举报