_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,这讲出现泄漏
最新评论