C语言_bstr_t和CComBSTR
来源:优易学  2011-9-11 13:06:13   【优易学:中国教育考试门户网】   资料下载   IT书店
  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。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训