您的位置:首页 > 其它

_bstr_t 和CComBSTR

2008-08-27 20:51 127 查看
_bstr_t在VC中是为了兼容BSTR类型而增加的,也就是为了实现LPCSTR与BSTR转换。

它需要头文件#include <comdef.h>

_bstr_t 是BSTR的包装类
转换方法

LPSTR strDemo="Test";
_bstr_t bstr(strDemo);
建议加上try,catch,用于catch(_com_error &e)

The following pseudocode shows the typical use of CComBSTR:

HRESULT CMyObject::MyMethod(IOtherObject* pSomething)
{
CComBSTR bstrText(L"Hello");
bstrText += " again";                     // LPCSTR conversion
bstrText.ToUpper();
pSomething->Display(bstrText);            // [in] parameter
MessageBoxW(0, bstrText, L"Test", MB_OK); // Assumes Windows NT
}
As you can see, CComBSTR significantly simplifies the use of BSTRs. Four uses of CComBSTR, however, require special care:


Freeing the BSTR explicitly

Using CComBSTR as an [out] parameter

Using a CComBSTR automatic variable in right-side assignments

Using a CComBSTR member variable in right-side assignments
当在BSTR*所在的位置作为一个[out]参数传递CComBSTR时,你必须先调用Empty释放string的内容,就象下面这样:
HRESULT CMyObject::MyMethod2(ISomething* p, /*[out]*/ BSTR* pbstr)
{
CComBSTR bstrText;



bstrText = L"Some assignment";     // BSTR is allocated.



bstrText.Empty();                  // Must call empty before
pSomething->GetText(&bstrText);    //  using as an [out] parameter.
if(bstrText != L"Schaller")
bstrText += "Hello";           // Convert from LPCSTR.
}
因为在重写BSTR内容之前方法COM 为[out] 参数的规则是并不调用sysfreestring,这讲出现泄漏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: