• 摘:分配和释放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);
      }
      
      
  • 相关阅读:
    latex在vim中的代码片段
    latex设置不同中英文字体
    React 路由基本配置
    React网络请求
    React生命周期函数
    React父子传值中propTypes defaultProps
    React父子组件传值
    React todolist案例和持久化实现
    React表单
    react事件对象 、键盘事件、 表单事件 、ref获取dom节点、React实现类似vue双向数据绑定
  • 原文地址:https://www.cnblogs.com/shenchao/p/3184003.html
Copyright © 2020-2023  润新知