|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
" O* N1 Z% Z5 u- e" k1 r, n
' i" Y& b1 ]6 H5 a) O0 c9 V: @) W5 E% d1 i* k7 a
1. LPCTSTR 实际上就是字符串,不过是会根据当前的字符集进行自适应:如果是ANSI的话,LPCTSTR = const char* ,如果是Unicode的话,LPCTSTR = const wchar_t*。
. E7 Z$ c2 ]; Z5 v其实这是windows下的命名方式,你把它的名字拆开了看就很清晰:LP:长指针,C:const,T:自适应,STR:字符串。类似的还有LPCSTR、LPSTR、LPTSTR、LPWSTR等等,你按照上面的方法拆开看就很清楚。
3 n8 j2 [, I5 r) e1 [# _" ^/ {' D& _7 q1 L' I1 \: @' a: j
2. std::string。这是C++标准库中的字符串类。是C++语言标准的一部分。提供对字符串的封装。用起来还算比较方便。它是窄字符类型(char),对应的还有一个宽字符版(wchar_t)的std::wstring类。% E" K- W$ h. D4 g0 ?
# h- x8 A; j; e4 d9 F" v* g3. VT_BSTR,VT是Variant(变体类型)的缩写,BSTR则是COM下的通用字符串类型。VT_BSTR其实并不是一个类型,它只是一个枚举用于标识当前的Variant到底是不是BSTR字符串。
" R2 L) e* h! m. r( X
( A- d4 J+ F) A3 N3 l估计你真正想问的是BSTR这个类型。这是COM中的通用字符串类型。可以跨语言。它的本质很简单,首先最前面有一个整数表示整个字符串的长度,接下来跟一个字符串,它统一为UTF-16编码,一个字符占两个字节(wchar_t类型),字符串以\0结尾。 它可以在多个程序和语言中传递,而且还可以被放进Variant类型的万能变量中。* G" B" q2 w% ?9 F
0 E; x% p3 F! x- B
第一种LPCTSTR在windows编程中很常见,只是对const char*或const wchar_t*的重定义而已。第二种std::string在C++编程中很常见,用于各种字符串的处理。第三种用得较少,主要是在ATL项目或者其它涉及到COM接口的时候会用到。
/ N6 e" c+ v" @7 S
3 A3 H X+ \3 b5 Z& s* u转化: ]' T& p$ u. y4 ?' R& _/ |
1. LPCTSTR 转 std::string:
: g$ b0 Q. W) T1 n% |6 `如上所述,LPCTSTR实际上是两种类型之一:在非Unicode下是const char*,在Unicode下是const wchar_t*。3 g4 a, a% k! z. j
如果是前者,那么很简单:直接赋值就可以了,std::string支持用const char*来构造,所以可以自动转化:7 W% O* }! Q# d. r$ \
LPCTSTR a = "hello!";
0 E0 j6 ~% p2 c% j5 qstd::string b = a;
' h( @2 V a+ A3 c1 Z8 T( `' H7 M要反着转回来也很方便,使用std::string提供的c_str()方法就可以:
j f7 p% u8 Z" ~& L% o5 zstd::string a = "hello";. G4 L/ A y" ~1 C) G. d' w2 n# _
LPCTSTR b = a.c_str();* R7 x% G, n' c; E" T
但如果LPCTSTR是后者即const wchar_t*那就麻烦了,因为这涉及到不同字符集之间的编码转换。不能直接转了,必须先得对字符串转编码才行,比如调用Win32API下的 MultiByteToWideChar()和WideCharToMultiByte()函数。
9 v, \: r# [( s! ^8 c4 g/ g& ~+ x- t# k$ j3 c2 w
2. LPCTSTR转BSTR:* x( V0 X& W6 z% G% M
可以使用COM中封装的类CComBSTR来代表BSTR:
9 V7 ~) i9 d' C; J7 ?, FCComBSTR a("Hello!");% j' A) G9 v2 Z. Z
BSTR b = a.m_bstr;) g% b' M' s5 R0 G1 i. {
也可以使用ConvertStringToBSTR等API。
4 @4 z: Y- Q' X0 f" P反向的转换则可以使用ConvertBSTRToString。
$ I: Q, H0 _3 a' m
7 ?8 q8 R: V% v8 L' X3. std::string转BSTR:现用c_str()转成const char*,再用上述方法转成BSTR。
- s) ]! ~/ I$ W$ E2 f4 t( I |
|