BSTR 是一个指向 UNICODE 字符串的指针,且BSTR 向前的4个字节中,使用DWORD保存着这个字符串的字节长度( 没有含字符串的结束符)。
由于BSTR的指针就是指向UNICODE串,因此 BSTR LPOLESTR 可以在一定程度上混用,但一定要注意:
  有函数 fun(LPCOLESTR lp),则你调用 BSTR p=...; fun(p); 正确
  有函数 fun(const BSTR bstr),则你调用 LPCOLESTR p=...; fun(p); 错误!!!
有关 BSTR 的处理函数:
API 函数
说明
SysAllocString()
申请一个 BSTR 指针,并初始化为一个字符串
SysFreeString()
释放 BSTR 内存
SysAllocStringLen()
申请一个指定字符长度的 BSTR 指针,并初始化为一个字符串
SysAllocStringByteLen()
申请一个指定字节长度的 BSTR 指针,并初始化为一个字符串
SysReAllocStringLen()
重新申请 BSTR 指针
CString 函数
说明
AllocSysString()
CString 得到 BSTR
SetSysString()
重新申请 BSTR 指针,并复制到 CString
SysAllocStringLen
函数原型:
BSTR SysAllocStringLen(
  OLECHAR FAR* pch, //初始化的指针:复制的CCH字符串或NULL
  unsigned int cch  //要复制的字符数, 然后追加一个空字符(分配CCH+1个字符)
);
函数功能:申请一个指定字符长度的 BSTR 指针,并初始化为一个字符串。
返回值:返回一个字符串的指针。 NULL表明,存在内存不足。
如果PCHNULL,分配请求的长度的字符串,但未初始化。 PCH的字符串可以包含嵌入的空字符,并不需要一个NULL结束。
例子:BSTR bstrText = ::SysAllocStringLen("Test",4); 
SysAllocString
BSTR SysAllocString(
  OLECHAR FAR* sz      //Sz必须是 32 位的 Unicode 字符串和16 位的ANSI 字符串
);
函数功能:此函数分配一个新的字符串,并将传递的字符串复制到它。如果内存不足或空指针传递中,cstring转为intSysAllocString 将返回 null
例子:BSTR bstrText = ::SysAllocString("Test"); 
SysFreeString
函数原型:
HRESULT SysFreeString(
BSTR bstr  //分配的Unicode字符串或NULL
);
函数功能:释放以前SysAllocStringSysAllocStringByteLenSysReAllocStringSysAllocStringLenSysReAllocStringLen分配的字符串。
返回值返回一个HRESULT的值。
例子:
BSTR bstrText = ::SysAllocString("Test"); 
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText); 
SysFreeString(bstrText); // 用完释放 
delete[] lpszText2; 

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