#include <atlconv.h>
void W2T_(WCHAR *lpw)
{
USES_CONVERSION;//调用ATL的x2x宏的时候别忘这句
char *tstr = W2T(lpw);
//to do somethiong
}
//TCHAR 转 BSTR
TCHAR *tstr = "BSTR字符串,释放了没有,不然内存爆死你!";
BSTR *bstr = T2BSTR(tstr);
SysFreeString(bstr);
大家兴许都觉得ATL中的T2BSTR ,W2T等一系列宏很方便
但一定要小心,因为:
它们从栈上分配内存,内部调用了alloca,该函数从栈上分配返回字符串的内存,而且,直到调用它的函数返回前,该内存不会被释放。
如果在一个循环中,这类宏被你反复调用几万次时,你将不可避免地产生stack overflow !而这个情况在循环次数不大时似乎一切正常,可当次数大是就会一败涂地。
解决的方法是,将用到该宏的语句独立封装成一个函数,然后,就可以心安理得地无限次调用了。