Sdílet prostřednictvím


Přidělení a uvolnění paměti pro BSTR

Při vytváření BSTR s a jejich předávání mezi objekty COM, musíte dbát v léčení paměti používají, aby se zabránilo nevrácené paměti.Když BSTR zůstává v rámci rozhraní je třeba uvolnit své paměti s ním po dokončení.Nicméně, když BSTR průchodů z rozhraní přijímající objekt přebírá odpovědnost za jeho správy paměti.

Obecně se pravidla pro přidělování a uvolňování paměti přidělené pro BSTR s jsou následující:

  • Při volání do funkce, která očekává BSTR argument, musíte přidělit paměť pro BSTR před volání a potom ji pustíte.Příklad:

    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);
    }
    
  • Při volání do funkce, která vrací BSTR , je třeba uvolnit řetězec sami.Příklad:

    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);
    
  • Při implementaci funkce vracející BSTR , přidělit řetězec, ale nikoli k jejich uvolnění.Přijímání funkce uvolní paměť.Příklad:

    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);
    }
    

Viz také

Referenční dokumentace

CStringT::AllocSysString

Další zdroje

Řetězce (ATL/MFC)

SysAllocString

SysFreeString