Zuordnen und Freigeben von Arbeitsspeicher für ein BSTR
Wenn Sie S erstellen BSTR
und zwischen COM-Objekten übergeben, müssen Sie darauf achten, den verwendeten Speicher zu behandeln, um Speicherverluste zu vermeiden. Wenn eine BSTR
Schnittstelle verbleibt, müssen Sie den Speicher freigeben, wenn Sie damit fertig sind. Wenn jedoch eine BSTR
Schnittstelle übergeht, übernimmt das empfangende Objekt die Verantwortung für die Speicherverwaltung.
Im Allgemeinen sind die Regeln zum Zuweisen und Freigeben des für s zugewiesenen BSTR
Speichers wie folgt:
Wenn Sie eine Funktion aufrufen, die ein
BSTR
Argument erwartet, müssen Sie den Speicher für den vor demBSTR
Aufruf zuweisen und es anschließend freigeben. Zum 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 eine Funktion aufrufen, die eine
BSTR
zurückgibt, müssen Sie die Zeichenfolge selbst freigeben. Zum 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 eine
BSTR
Zeichenfolge zurückgibt, weisen Sie die Zeichenfolge zu, geben Sie sie jedoch nicht frei. Die Empfangende Funktion gibt den Speicher frei. Zum 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
Zeichenfolgen (ATL/MFC)
CStringT::AllocSysString
SysAllocString
SysFreeString