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 );
      }
      //...
      
  • 相关阅读:
    python瓦登尔湖词频统计
    css规范思维导图(仅限于自己)
    html规范思维导图(仅限于自己)
    vue-cli配置跨域代理
    vue中的scoped分析以及在element-UI和vux中的应用
    yarn和npm的对比,以及项目中使用方式
    Promise对异步编程的贡献以及基本API了解
    跨域限制原因及常见跨域方法
    js中的逗号运算符
    JS中的浅拷贝与深拷贝
  • 原文地址:https://www.cnblogs.com/andyliu1988/p/6093930.html
Copyright © 2011-2022 走看看