USES_CONVERSION是ATL中的一个 宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。在ATL下使用要包含头文件#include "atlconv.h"
使用USES_CONVERSION一定要小心,它们从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放。如果在一个循环中,这个宏被反复调用几万次,将不可避免的产生stackoverflow。
解决方法是:将用到该宏的语句独立封装成一个函数,这样就可以无限次调用了。
例:
void fn()
{
while (true)
{
USES_CONVERSION;
DoSomething(A2W("Something"));
}
}
改成------------------------------->
void fn2()
{
USES_CONVERSION;
DoSomething(A2W("Something"));
}
void fn()
{
while(true)
{
fn2();
}
}

本文介绍了ATL中的USES_CONVERSION宏定义及其用途,主要用于编码转换,特别是CString到LPCWSTR的转换。文中提醒开发者使用该宏定义时应注意内存管理,避免栈溢出,并提供了一个安全使用的示例。
2551

被折叠的 条评论
为什么被折叠?



