BSTRLPSTRLPWSTRCStringVARIANTCOleVariant _variant_t……相互转化<转载>
武宏伟 blog.sina/longbao617 2011-03-30 19:09:35
charC语言标准数据类型,字符型,至于由几个字节组成通常由编译器决定,一般一个字节。Windows为了消除各编译器的差别,重新定义了一些数据类型,你提到了另外几个类型都是这样。CHAR为单字节字符。还有个WCHARUnicode字符,即不论中英文,每个字有两个字节组成。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHARLPCSTR相当于CONST CHAR * LPSTR 相当于CHAR *
LPSTRLPCSTR相当于char *,所以这种类型变量的赋值等同于char *的赋值。Ex1: LPSTR lpstrMsg = "I'm tired.";

Ex2: char strMsg[]="I'm tired.";
unicode字符转中文LPSTR lpstrMsg = (LPSTR) strMsg
BSTR(Basic STRingBasic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。LPSTRLPWSTRWin32VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的8ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中,还有类似的字符串类型,如LPTSTRLPCTSTR等。LPSTRLPWSTRWin32VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的8ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中,还有类似的字符串类型,如LPTSTRLPCTSTR
---------------------------------
Visual C++.NET涉及到ATL/ATL ServerMFC和托管C++等多种编程方式,不仅功能强大而且应用广泛。在编程中,我们常常会遇到ANSIUnicode以及BSTR不同编码类型的字符串转换操作。本文先介绍基本字符串类型,然后说明相关的类,如CComBSTR_bstr_tCSt
ringT等,最后讨论它们的转换方法,其中还包括使用最新ATL7.0的转换类和宏,如CA2CTCA2TEX等。
一、BSTRLPSTRLPWSTR
Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTRLPSTRLPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSIUnicode和多字节字符集(MBCS)的支持。
那么什么是BSTRLPSTR以及LPWSTR呢?
BSTR(Basic STRingBasic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。
LPSTRLPWSTRWin32VC++所使用的一种字符串数据类型。LPSTR被定义成是一个
指向以NULL(‘\0’)结尾的8ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中,还有类似的字符串类型,如LPTSTRLPCTSTR等,它们的含义如图2所示。
例如,LPCTSTR是指“long pointer to a constant generic string”,表示一个指向一般字符串常量的长指针类型,与C/C++const char*相映射,而LPTSTR映射为char*
一般地,还有下列类型定义:
#ifdef UNICODE
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
二、CStringCStringA CStringW
Visual C++.NET中将CStringT作为ATLMFC的共享的一般字符串类,它有CStringCStringACStringW三种形式,分别操作不同字符类型的字符串。这些字符类型是TCHARcharwchar_tTCHARUnicode平台中等同于WCHAR(16Unicode字符),在ANSI中等价于charwchar_t通常定义为unsigned short。由于CStringMFC应用程序中经常用到,这里不再重复。
三、VARIANTCOleVariant _variant_t
OLEActiveXCOM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:
struct tagVARIANT {
VARTYPE vt;
union {
short iVal; // VT_I2.
long lVal; // VT_I4.
float fltVal; // VT_R4.
double dblVal; // VT_R8.
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.

short * piVal; // VT_BYREF|VT_I2.
long * plVal; // VT_BYREF|VT_I4.
float * pfltVal; // VT_BYREF|VT_R4.
double * pdblVal; // VT_BYREF|VT_R8.
DATE * pdate; // VT_BYREF|VT_DATE.
BSTR * pbstrVal; // VT_BYREF|VT_BSTR.
};
};

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。