ATL X2X字符串转换宏【谨慎使用】

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

#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 !而这个情况在循环次数不大时似乎一切正常,可当次数大是就会一败涂地。
解决的方法是,将用到该宏的语句独立封装成一个函数,然后,就可以心安理得地无限次调用了。
VC中一个关于使用问题 A2W W2A VC中一个关于使用问题文/赵湘宁    这儿是个关于的问题,我曾用过ATL的串转换,包括W2A,开始有些东西我还不太明白。为了使用这些,必须在函数的开始处用USES_CONVERSION来初始化某些局部变量。用就用吧,但是看看这个的定义,它有类似下面的代码:// 在atlconv.h文件中#define USES_CONVERSION /int _convert; _con 阅读详情

相关推荐

C++ Win32 Api 实现了atlconv.h 编码转换的功能

textconv_helper.hpp/* * Author: LowBoyTeam (https://github.com/LowBoyTeam) * License: Code Project Open License * Disclaimer: The software is provided &quot;as-is&quot;. No claim of suitability, guarantee, or an

RootSuper 1050

谨慎使用ATL X2X字符串转换

        大家也许都觉得ATL中的W2T ,T2W等一系列很方便,但一定要小心,因为:它们从栈上分配内存!!!内部调用了alloca,该函数从栈上分配返回字符串的内存,而且,直到调用它的函数返回前,该内存不会被释放。        如果在一个循环中,这类被你反复调用几万次时,你将不可避免地产生stack overflow !!而这个情况在循环次数不大时似乎一切正常,可当次数大是就会一败涂

wowuyinglingluan的专栏 881

ATL字符串转换

有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换,你相信吗? 头文件 d:/program files/microsoft visual studio 8/vc/atlmfc/include/atlconv.h 如果要使用ATL字符串转换,请先定义 USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多

云守护的专栏 9898

转 163的一片blog,ATL字符串转换

<br />ATL字符串转换<br />VS.字符串类 2009-04-11 18:59:34 阅读94 评论0  字号:大中小 订阅有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换,你相信吗?<br /><br />头文件<br />d:/program files/microsoft visual studio 8/vc/atlmfc/include/atlconv.h<br /><br />如果要使用ATL字符串转换,请先定义<br />USE

徐新华的专栏 581

VC中的字符串转换

无幻>> http://blog.csdn.net/akof1314/article/details/7397206 ATL7.0引入了几个新的转换类和,现有的提供了显着的改善。新的字符串转换类和的名称,采取的形式如下: C SourceType 2[C]DestinationType[EX] 其中,[C]表示目的类型是const类型的,[EX]表示指定了保存字符串数据的固定静态缓存

IT05的专栏 1058

ATL浅谈(二)

ATL浅谈(二) 由于上一篇写的太浅,这篇谈点实际的东西。 ATL和STL一样,是由一些小巧、高效和灵活的类组成的集合。但是,伴随着权利而来的是职责。和STL一样,只有有经验的C++程序员(最好的STL经验)才能有效地使用它。 ATL给我们提供了什么?那些希望在对COM一无所知的情况下建立COM对象的人,ATL不适合他们。事实上,使用ATL意味着要非常熟悉C++中的COM以及ATL本身的实现细节

wangweixing2000 2695

字符串转换 A2T

http://blog.csdn.net/b_fushuaibing/article/details/4437986   字符串转换 分类: 一般技术2009-08-12 12:59 166人阅读 评论(0) 收藏 举报 计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0

徐新华的专栏 1274

ATL字符串转码的陷阱

在代码中经常使用UTF8与Wide Char的转换,每次手工调用WideCharToMultiByte转换很是麻烦,于是参考ATL的W2A、A2W这样的,自己写了两个:UTF82W、W2UTF8。我写的UTF82W、W2UTF8与ATL的W2A、A2W一样,都是使用_alloca在栈上开辟临时空间存放转换结果的。后来,由于在使用中出现了一个函数中转换的次数过多导致栈溢出的问题。于是想改进这

程序道 4271

深入解析ATL(第二版ATL8.0)(2.1-2.2节)

第二章 字符串和文本翻译:赖仪灵出处:http://blog.csdn.net/laiyiling, http://www.cppblog.com/techlab 声明:版权归原作者拥有,请勿随意转载此翻译文档,保留一切权利。字符串引入了多种不同的字符集。COM组件通常需要使用多个不同的字符集,并在不同的字符集之间相互转换ATL提供了一些字符串转换类,需要时这些类会自动把字符集进行转换,如果

.NET博文收藏 684

字符串转换

计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。他们以为这128个数字就足够表示abcd....ABCD....1234 这些字符了。  咳......说英语的人就是“笨”!后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。于是又扩展了ASCII的定义,使

虚拟化开发 1268

C/C++宽窄字符串转换及其注意事项(一)

今天在调试公司代码的时候,因为宽窄字符串转换问题引起程序崩溃,所以,趁此机会,把最近用到的方法总结一下。  一、ATL and MFC String Conversion Macros  1) ATL 7.0 字符串转换类和   ATL 7.0介绍了几种新的字符串转换类和,以下的有明显改善的地方。转换格式如下:  C(源字符串)2[C](目的字符串)[EX]  C:转换出来的目

チンポー的博客 3151

UTF8转换转换

参考微软 ANSI和WCHAR的转换代码,编写的UTF8和ANSI、WCHAR转换代码。 可在ATL/MFC环境下使用

crazy Crypto 3547

字符串转换问题

1.16进制的字符串与16进制数的转换: sscanf(“12AB”,”%x”,&lngHex); // 字符也可以为 ”0x12AB” 原文链接:

qq_38883139的博客 259

关于USES_CONVERSION

关于USES_CONVERSION 首先,介绍下USES_CONVERSION为何物。 USES_CONVERSION是ATL中的一个定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。通俗的说,就是用了这个后,就可以用一系列的字符串转换,有OLE到T,T到OLE,OLE到W,W到OLE等等,非常方便。或者说,这个会告诉编译器,在紧接的代码中我们要用OLE库中代码...

《好好先生》专栏 1万+
上一篇: 打造最强的VC++6.0 IDE
下一篇: 栈和堆的区别
一秀
博客等级 码龄14年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值