zoukankan      html  css  js  c++  java
  • 摘:分配和释放BSTR的内存

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

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

    • 在您调用需要 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);
      }
      
      
    • 在您调用返回 BSTR的函数时,必须释放字符串。       例如:  

      
      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);
      
      
    • 在实现返回 BSTR的函数时,将字符串,但不要释放它。       接收函数释放内存。       例如:  

      
      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);
      }
      
      
  • 相关阅读:
    QTableWidget控件总结<一>
    软件工程概论9
    软件工程概论8
    软件工程概论7
    软件工程概论6
    软件工程概论5
    软件工程概论4
    软件工程概论3
    软件工程概论2
    安装gocode教程
  • 原文地址:https://www.cnblogs.com/shenchao/p/3184003.html
Copyright © 2011-2022 走看看