ccombstrbstr:_bstr_t 和CComBSTR



_bstr_t在VC中是为了兼容BSTR类型而增加也就是为了实现LPCSTR和BSTR转换

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

_bstr_t 是BSTR包装类
转换思路方法

LPSTR strDemo="Test";
_bstr_t bstr(strDemo);
建议加上trycatch用于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 signicantly simplies 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释放内容就象下面这样: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.
(bstrText != L"Schaller")
bstrText "Hello"; // Convert from LPCSTR.
}
在重写BSTR内容的前思路方法COM 为[out] 参数规则是并不sysfree,这讲出现泄漏
Tags:  combstr charbstr cstringbstr ccombstrbstr

延伸阅读

最新评论

发表评论