请问C++中的BSTR和COM中的BSTR是一回事吗?
clxye 2010-07-16 08:32:41 以下内容该如何理解:
BSTR 是 Pascal-style 字符串(字符串长度被明确指出)和C-style字符串(字符串的长度要通过寻找结束符来计算)的混合产物。一个BSTR是一个Unicode字符串,它的长度是预先考虑的,并且它还有一个0字符作为结束标记。下面是一个BSTR的示例:
06 00 00 00 42 00 6F 00 62 00 00 00
--length-- B o b EOS
注意字符串的长度是如何被加到字符串数据中的。长度是DWORD类型的,保存了字符串中包含的字节数,但不包括结束标记。在这个例子中,"Bob"包含3个Unicode字符(不包括结束符),总共6个字节。字符串的长度被预先存储好,以便当一个BSTR在进程或者计算机之间被传递时,COM库知道多少数据需要传送。(另一方面,一个BSTR能够存储任意数据块,而不仅仅是字符,它还可以包含嵌入在数据中的0字符。然而,由于这篇文章的目的,我将不考虑那些情况)。
在 C++ 中,一个 BSTR 实际上就是一个指向字符串中第一个字符的指针。它的定义如下:
BSTR bstr = NULL;
bstr = SysAllocString ( L"Hi Bob!" );
if ( NULL == bstr )
// out of memory error
// Use bstr here...
SysFreeString ( bstr );
自然的,各种各样的BSTR封装类为你实现内存管理。
我看过COM相关的书,上面关于BSTR的确如文中所说,我也看过C++中的BSTR,它的确就是OLECHAR*类型,但感觉这完全就是两种不同的类型啊,不知道他所表达的意思是不是说在COM和C++中,BSTR表示的是不同的类型?
谢谢!!