当您创建 BSTR的并将它们使用以避免内存泄漏的它们在COM对象之间时,必须注意在将内存的。       但是,那么,当 BSTR 通过在接口外时,接收的对象对其内存管理的责任。  

    通常,分配和释放为 BSTR分配的内存的规则如下:

  •     例如:  

    
    HRESULT CMyWebBrowser::put_StatusText(BSTR bstr)
    
    
    
    // shows using the Win32 function 
    // to allocate memory for the string: 
    BSTR bstrStatus = ::SysAllocString(L"Some text");
    if (bstrStatus != NULL)
    {
       pBrowser->put_StatusText(bstrStatus);
       // Free the string:
       ::SysFreeString(bstrStatus);
    }
    
    
  •     例如:  

    
    HRESULT CMyWebBrowser::get_StatusText(BSTR* pbstr)
    
    
    
    BSTR bstrStatus;
    pBrowser->get_StatusText(&bstrStatus);
    
    // shows using the Win32 function 
    // to free the memory for the string: 
    ::SysFreeString(bstrStatus);
    
    
  •     例如:  

    
    HRESULT CMyClass::get_StatusText(BSTR* pbstr)
    {
       try
       {
          //m_str is a CString in your class
          *pbstr = m_str.AllocSysString();
       }
       catch (...)
       {
          return E_OUTOFMEMORY;
       }
    
       // The client is now responsible for freeing pbstr.
       return(S_OK);
    }
    
    

相关文章: