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);
      }
      
      
  • 相关阅读:
    经纬度计算距离
    MS SQL 获取身份证年龄
    C# SpeechSynthesizer 使用
    mysql 获取字段括号里的内容
    C# 获取操作系统版本
    微信 小程序跳转到的H5页面,再跳转回跳小程序
    SQL 收缩日志
    SQL 获取表结构
    SQL Server 优化
    Snowflake
  • 原文地址:https://www.cnblogs.com/shenchao/p/3184003.html
Copyright © 2011-2022 走看看