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 的处理函数:
有函数 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表明,存在内存不足。 如果PCH是NULL,分配请求的长度的字符串,但未初始化。 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 ); 函数功能:释放以前SysAllocString,SysAllocStringByteLen,SysReAllocString,SysAllocStringLen或SysReAllocStringLen分配的字符串。 返回值:返回一个HRESULT的值。 |
例子: BSTR bstrText = ::SysAllocString("Test"); char* lpszText2 = _com_util::ConvertBSTRToString(bstrText); SysFreeString(bstrText); // 用完释放 delete[] lpszText2; |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论