ATL字符宏使用以及代码测试
// ATL_Convert.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <atlconv.h>
#include <tchar.h>
#include <stdio.h> //USES_CONVERSION; //使用ATL字符转换宏 int _tmain(int argc, _TCHAR* argv[])
{
char a[] = "china";
USES_CONVERSION;
::MessageBoxW(NULL, A2W(a), L"",MB_ICONASTERISK | MB_TASKMODAL | MB_OK);
system("pause");
return ;
}
有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏,你相信吗?
头文件
d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlconv.h
如果要使用ATL字符串转换宏,请先定义
USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多次转换
下面一个例子:
    USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多次转换
    char a[12] = "china";
    ::MessageBoxW( NULL, A2W(a), L"", MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:
    1、只适合于进行短字符串的转换;
    2、不要试图在一个次数比较多的循环体内进行转换;
    3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
    4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
使用 ATL 提供的转换宏。
 
| A2BSTR | OLE2A | T2A | W2A | 
| A2COLE | OLE2BSTR | T2BSTR | W2BSTR | 
| A2CT | OLE2CA | T2CA | W2CA | 
| A2CW | OLE2CT | T2COLE | W2COLE | 
| A2OLE | OLE2CW | T2CW | W2CT | 
| A2T | OLE2T | T2OLE | W2OLE | 
| A2W | OLE2W | T2W | W2T | 
上表中的宏函数,其实非常容易记忆:
| 2 | 好搞笑的缩写,to 的发音和 2 一样,所以借用来表示“转换为、转换到”的含义。 | 
| A | ANSI 字符串,也就是 MBCS。 | 
| W、OLE | 宽字符串,也就是 UNICODE。 | 
| T | 中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A | 
| C | const 的缩写 | 
ATL字符宏使用以及代码测试的更多相关文章
- 理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)
		
我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以 ...
 - 视频转字符动画-Python-60行代码
		
更新:2018-5-21 注意: 最后一步播放字符动画使用了只支持类 unix 系统的模块 curses, 因此在windows上是播放不了的... 解决方法: 1. 最近好像有一个移植 https: ...
 - 《汇编语言 基于x86处理器》第十章结构和宏部分的代码
		
▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ...
 - ATL中宏定义offsetofclass的分析
		
近日学习ATL,通过对宏定义offsetofclass的解惑过程.顺便分析下虚函数表,以及通过虚函数表调用函数的问题. 1 解开ATL中宏定义offsetofclass的疑惑 #define _ATL ...
 - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
		
测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的, ...
 - Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试
		
日常啰嗦 看到标题你可能会问为什么这一篇会谈到代码测试,不是说代码优化么?前两篇主要是讲了程序的输出及Log4j的使用,Log能够帮助我们进行bug的定位,优化开发流程,而代码测试有什么用呢?其实测试 ...
 - HashMap在JDK1.8中并发操作,代码测试以及源码分析
		
HashMap在JDK1.8中并发操作不会出现死循环,只会出现缺数据.测试如下: package JDKSource; import java.util.HashMap; import java.ut ...
 - iOS 覆盖率检测原理与增量代码测试覆盖率工具实现
		
背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...
 - SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)
		
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...
 
随机推荐
- Redis简述
			
Redis 简单介绍 Redis 是全然开源免费的.遵守BSD协议,是一个高性能的key-value数据库. Redis 与其它 key - value 缓存产品有下面三个特点: Redis支持数据的 ...
 - tmpx75 I2C 温度传感器驱动程序添加
			
在kernel 内 make menuconfig 加入相关选项 Device Drivers ---> <*> Hardware Monitoring support ---> ...
 - spring4.1.6配置quartz2.2.1(maven) <转>
			
Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError ...
 - KMP算法匹配原理以及C++实现
			
原创作品,转载请注明出处:点我 假设A表示目标字符串,A="abababaababacb",B表示匹配模式,B="ababacb" 用两个指针i和j分别表示,A ...
 - Logrotate日志轮巡missingok: 在日志轮循期间,任何错误将被忽略
			
Linux日志文件总管——logrotate 编译自:http://xmodulo.com/2014/09/logrotate-manage-log-files-linux.html ...
 - el 表达式 强制类型转换
			
el 表达式 强制类型转换 今天有人问我了这个问题 jsp页面中,能否实现 <% request.setAttrites("a","1234"); % ...
 - Ajax类
			
ajax.js -------------------------[ajax类]-------------------------- function Ajax(recvType){ var aj=n ...
 - 数学符号arg含义
			
argument of the maximum/minimum arg max f(x): 当f(x)取最大值时,x的取值 arg min f(x):当f(x)取最小值时,x的取值 表示使目标函数取最 ...
 - numpy库中的知识点——积累
			
下面是一些杂碎的知识点: 首先我们说说多维数组: 数组的属性: ndarray.ndim, 表示数组的秩是多少: ndarray.shape,返回数组的形状: ndarray.size,数组元素的总个 ...
 - 第二百九十五节,python操作redis缓存-字符串类型
			
python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...