Freigeben über


Allocating and Releasing Memory for a BSTR

Wenn Sie BSTR s erstellen und sie zwischen COM-Objekten übergeben, müssen Sie darauf achten, wenn Sie den Speicher behandeln, den sie verwenden, um Speicherverluste zu vermeiden. Wenn BSTR innerhalb einer Schnittstelle bleibt, müssen Sie den Speicher freigeben, wenn Sie damit fertig sind. Wenn BSTR übergibt aus einer Schnittstelle out, das empfangende Objekt Verantwortung für die Speicherverwaltung angewendet wird.

Im Allgemeinen sind die Regeln zum Belegen und Freigeben von Speicher, der für BSTR s zugeordnet ist, wie folgt:

  • Wenn Sie in eine Funktion aufrufen, die ein BSTR-Argument erwartet, müssen Sie den Speicher für BSTR vor dem Aufruf zuordnen und ihn danach freigeben. Beispiel:

    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);
    }
    
  • Wenn Sie in eine Funktion aufrufen, die BSTR zurückgibt, müssen Sie die Zeichenfolge freigeben. Beispiel:

    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);
    
  • Wenn Sie eine Funktion implementieren, die BSTR zurückgibt, ordnen Sie zu, die Zeichenfolge jedoch geben Sie diese nicht frei. Das Empfangen der Funktion gibt den Arbeitsspeicher frei. Beispiel:

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

Siehe auch

Referenz

CStringT::AllocSysString

Weitere Ressourcen

Strings (ATL/MFC)

SysAllocString

SysFreeString