记录:
1、在MSDN中搜索_T可以查询到相关内容。Using TCHAR.H Data Types with _MBCS Code. 和MSDN页面下面的内容应该详细了解一下。
摘自:http://blog.sina.com.cn/s/blog_635ff3050102v5w4.html
_T("")是一个宏,定义于tchar.h下。
#define _T(x) _ _T(x)
#ifdef _UNICODE
#define _ _T(x) L ## x
#else
#define _ _T(x) x
他的作用是让你的程序支持Unicode编码
因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。
而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。
如果你编译一个程序为ANSI方式,_T实际不起任何作用,编译器会把_T("Hello")以ANSI方式保存;而如果编译一个程序为UNICODE方式,则编译器会把_T("Hello")字符串以UNICODE方式保存。
_T和L的区别在于,L不管你是以什么方式编译,一律以UNICODE方式保存。
LPSTR:32bit指针指向一个字符串,每个字符占1字节
LPCSTR:32-bit指针指向一个常字符串,每个字符占1字节
LPCTSTR:32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
LPTSTR:32-bit指针每字符可能占1字节或2字节,取决于Unicode是否定义
L是表示字符串资源为Unicode的。
比如
wchar_t Str[] = L"Hello World!";
这个就是双子节存储字符了。
_T是一个适配的宏~
当
#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。
比如
LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T("Hello");
以上两句使得无论是在UNICODE编译条件下都是正确编译的。
而且MS推荐你使用相匹配的字符串函数。
比如处理LPTSTR或者LPCTSTR 的时候,不要用strlen ,而是要用_tcslen
否则在UNICODE的编译条件下,strlen不能处理 wchar_t*的字符串。
T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定
TCHAR是char还是wchar_t这个是根据是否定义了#ifdef _UNICODE来决定的。在vs2010中,根据选择字符集来决定了是否定义_UNICODE。
Character Use Unicode Character Set
typedef wchar_t TCHAR;
Character Use Multi-Byte Character Set
typedef char TCHAR;
相关推荐
在VC++编程环境中,涉及到字符编码时,经常会遇到L、_T()以及TEXT()这三个符号。这些符号主要用于处理不同字符编码格式,特别是涉及到Unicode和ANSI编码时。下面将详细阐述它们之间的区别和用法。 首先,Unicode是...
- **起源与发展**:C++语言起源于20世纪70年代,最初是由贝尔实验室的Dennis Ritchie基于BCPL语言(Basic Combined Programming Language)开发的B语言,进而演化出了C语言。C语言的设计初衷是为了编写UNIX操作系统...
同时,在定义 Unicode字符串常量时,需要在前面加一个“L”,例如:wchar_t *szTest=L"This is a Unicode string."; 三、TCHAR类型 TCHAR是一个宏,它不是一个类型,而是一个根据编译器的设置而变化的宏。在ANSI...
在VC++编程环境中,_T()宏是一个非常重要的工具,它主要用于处理字符串编码的兼容性问题。这个宏允许开发者编写与ASCII和Unicode编码兼容的代码,而无需对源代码进行大量修改。本文将深入探讨_T()宏的作用以及其在...
### VC++中的char, wchar_T和TCHAR详解 在VC++开发环境中,处理文本数据时,程序员经常会遇到三种字符类型:`char`、`wchar_T` 和 `TCHAR`。这些类型的选择对于确保代码的兼容性和效率至关重要。本文将详细介绍这三...
wchar_t* wstr = L"你好,世界"; CString str; str = _T(wstr); ``` 3. `CString`到`int`:`ATOL()`或`_wtoi()`函数可以将`CString`转换为`int`。 ```cpp CString str = _T("12345"); int num = _wtoi(str); ``` ...
### VC++6.0与VS2010的主要区别 #### 一、字符串处理的不同 在VC++6.0中,字符串处理主要依赖于多字节字符集(MBCS),例如`MessageBox("你好");`这样的写法,在VS2010中可能会遇到问题。这是因为VS2010更倾向于使用...
除了 `_T()`,还有 `TEXT()` 和 `_TEXT()` 宏,它们与 `_T()` 宏具有相同的功能。例如,`TCHAR szStr1[] = TEXT("str1");` 这行代码会根据 `_UNICODE` 是否被定义,编译为 `WCHAR szStr1[] = L"str1";` 或 `char ...
在VC++中嵌入Excel是一项常见的任务,尤其是在开发企业级应用程序时,可能需要与Microsoft Office进行集成,以实现数据处理、报表生成等功能。MFC(Microsoft Foundation Classes)是微软提供的一个C++类库,用于...
VC++常用快捷键大全 VC++是微软公司出品的集成开发环境(IDE),它提供了许多快捷键来提高开发效率。下面是VC++中常用的快捷键大全: 基本编辑 * F1:帮助 * Ctrl+O:Open * Ctrl+P:Print * Ctrl+N:New * Ctrl+...
_bstr_t connectionStr(L"Provider=Microsoft.JET.OLEDB.4.0;Data Source=d:\\MyDatabase.mdb;"); try { catalog->Create(connectionStr); } catch (_com_error &e) { // 错误处理 } ``` 在创建数据库之后,可以...
- 它可以处理ANSI和Unicode字符串,通过预处理器宏_T和L来选择使用。 - 使用FormatMessage()函数可以将格式化的字符串插入到CString中。 - CString还提供了AppendFormat(),类似于C语言中的printf()。 总结,...
3. **XML文件加载与解析**:在VC++中,可以使用`CoCreateInstance`函数实例化`IXMLDOMDocument`对象,然后调用`load`或`loadXML`方法加载XML文件内容。例如: ```cpp CoInitialize(NULL); IXMLDOMDocument *pDoc;...
焦点决定了用户与界面交互时,哪个控件会接收键盘输入。这篇文章将深入探讨如何在VC++中为控件设置焦点,以及相关的API函数和文本抽取技术。 首先,我们从最基础的MFC(Microsoft Foundation Classes)库开始。MFC...
本文将深入探讨VC++中的几种主要字符串类型及其相互转换,包括CString、BSTR、LPCTSTR以及它们与其他字符串类型的交互。 1. CString:作为MFC(Microsoft Foundation Classes)库的一部分,CString是一个动态的...
BSTR bstrXML = SysAllocString(L"<root><element>Content</element></root>"); hr = pDoc->loadXML(bstrXML); SysFreeString(bstrXML); if (FAILED(hr)) { // 加载失败处理 } ``` 这段代码创建了一个新的XML文档...
pCommand->PutParameter(2, adVarChar, adParamInput, 50, _variant_t(L"张三")); // name参数 pCommand->PutParameter(3, adInteger, adParamInput, 0, _variant_t(10)); // age参数 pCommand->Execute(NULL, NULL,...
每个端点可以有以下四种状态:左(L)、右(R)、上(T)或下(B),表示端点位于对应边的哪一侧。如果直线的两个端点的裁剪码不同时包含某个边的码,则该直线被该边裁剪;反之,如果两个端点的裁剪码相同,那么直线...
workbook->SaveAs(L"C:\\MyFile.xlsx"); excel->Quit(); ``` 8. **错误处理**: 在进行自动化操作时,需要处理可能出现的异常,如文件已存在、权限问题等。 ```cpp try { // 上述代码... } catch (_com_error& e) {...
_bstr_t(L"\\\\.\\ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, NULL, &pSvc); if (FAILED(hRes)) { pLoc->Release(); CoUninitialize(); return -1; } // 设置安全性和身份验证级别 hRes = ...