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 );
      }
      //...
      
  • 相关阅读:
    Codeforces 834D The Bakery
    hdu 1394 Minimum Inversion Number
    Codeforces 837E Vasya's Function
    Codeforces 837D Round Subset
    Codeforces 825E Minimal Labels
    Codeforces 437D The Child and Zoo
    Codeforces 822D My pretty girl Noora
    Codeforces 799D Field expansion
    Codeforces 438D The Child and Sequence
    Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D)
  • 原文地址:https://www.cnblogs.com/andyliu1988/p/6093930.html
Copyright © 2011-2022 走看看