Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przydzielanie i zwalnianie pamięci dla elementu
Uwaga / Notatka
Biblioteka klas Microsoft Foundation (MFC) i biblioteka Active Template Library (ATL) nadal są obsługiwane. Nie dodajemy już funkcji ani nie aktualizujemy dokumentacji.
Podczas tworzenia BSTRobiektów COM i przekazywania ich między obiektami COM należy zadbać o traktowanie używanej pamięci, aby uniknąć przecieków pamięci.
BSTR Gdy element pozostanie w interfejsie, należy zwolnić jego pamięć po zakończeniu pracy z nim. Jednak po BSTR przejściu z interfejsu obiekt odbierający ponosi odpowiedzialność za zarządzanie pamięcią.
Ogólnie rzecz biorąc, reguły przydzielania i zwalniania pamięci przydzielonej dla BSTRs są następujące:
Po wywołaniu funkcji, która oczekuje
BSTRargumentu, należy przydzielić pamięć przedBSTRwywołaniem i zwolnić ją później. Na przykład: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); }Po wywołaniu funkcji zwracającej wartość
BSTR, należy samodzielnie zwolnić ciąg. Na przykład: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);Podczas implementowania funkcji zwracającej
BSTRelement , przydziel ciąg, ale go nie zwalniaj. Funkcja odbierającego zwalnia pamięć. Na przykład: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); }
Zobacz też
Ciągi (ATL/MFC)
CStringT::AllocSysString
SysAllocString
SysFreeString