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

    分配和释放 BSTR 的内存

    Visual Studio .NET 2003                 
    转自:
    https://msdn.microsoft.com/zh-cn/library/cc485262(v=vs.71).aspx 
     
    当创建 BSTR 并在 COM 对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当 BSTR 停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果 BSTR 传递出了接口,那么接收对象将负责它的内存管理。

    一般情况下,分配和释放分配给 BSTR 的内存的规则如下:

    • 当调用进来一个需要 BSTR 参数的函数时,必须在调用之前为 BSTR 分配内存,并且在完成操作之后将其释放。例如:
       
      HRESULT IWebBrowser2::put_StatusText( BSTR bstr );
      
      // shows using the Win32 function 
      // to allocate memory for the string: 
      BSTR bstrStatus = ::SysAllocString( L"Some text" );
      if (bstrStatus == NULL)
         return E_OUTOFMEMORY;
      
      pBrowser->put_StatusText( bstrStatus );
      // Free the string:
      ::SysFreeString( bstrStatus );
      //...
      
    • 当调用进来一个返回 BSTR 的函数时,必须自己来释放字符串。例如:
       
      HRESULT IWebBrowser2::get_StatusText( BSTR FAR* pbstr ); 
      //...
      BSTR bstrStatus;
      pBrowser->get_StatusText( &bstrStatus );
      
      // shows using the Win32 function 
      // to freee the memory for the string: 
      ::SysFreeString( bstrStatus );
      
    • 当实现返回 BSTR 的函数时,请分配字符串,但不要释放它。接收函数会释放内存。例如:
       
      // Example shows using MFC's 
      // CString::AllocSysString
      
      //...
      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.js调用ocx里的方法时,ocx里的方法不需要释放
      return( S_OK );
      }
      //...
      
  • 相关阅读:
    2016-10-17: source insight插件
    Reactor模式通俗解释
    2016-09-19: linux后台运行
    2016-08-16: 检测函数是否存在的C++模板
    2016-08-16: copy-and-swap
    2016-08-15:从YUV420P中提取指定大小区域
    2016-08-15: C++ traits
    2016-08-05:samba服务器配置
    LINQ 根据指定属性名称对序列进行排序
    Resharper
  • 原文地址:https://www.cnblogs.com/andyliu1988/p/6093930.html
Copyright © 2011-2022 走看看