BSTR类型在COM中是一个非常重要的字符串类型。
(一)BSTR的定义
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
(二)管理BSTR的API:
(A)创建一个BSTR
BSTR SysAllocString( const OLECHAR * sz );
BSTR SysAllocStringByteLen( LPCSTR psz, unsigned int len );
BSTR SysAllocStringLen( const OLECHAR * pch, unsigned int cch );
(B)释放一个BSTR
VOID SysFreeString( BSTR bstr);
(C)取得BSTR字符串的长度
UINT SysStringLen( BSTR bstr );需要注意的是通过SysAllocStringByteLen和SysAllocStringLen创建的BSTR,返回的这两个函数中的cch参数的值,可能与wcslen(bstr)求得值不一样。
(三)BSTR的内存模型
下面以值为”test”的BSTR字符串为为例说明
BSTR bs;
bs = ::SysAllocString(L"test");
::SysFreeString(bs);
0x04 |
0x00
|
0x00
|
0x00 |
‘t’ |
‘e’
|
0x00
|
0x00 |
‘s’ |
‘t’
|
0x00
|
0x00 |
bs |
0x04 |
0x00
|
0x00
|
0x00 |
‘t’ |
‘e’
|
0x00
|
0x00 |
‘s’ |
‘t’
|
0x00
|
0x00 |
bs |
0x04 |
0x00 |
0x00 |
0x00 |
't' |
0x00 |
'e' |
0x00 |
's' |
0x00 |
't' |
0x00 |
bs指向的是第4个字节所在的位置