Bir için Bellek Ayırma ve Serbest Bırakma BSTR
s oluşturduğunuzda BSTR
ve bunları COM nesneleri arasında geçirirken, bellek sızıntılarını önlemek için kullandıkları belleğin tedavisine dikkat etmeniz gerekir. Bir BSTR
arabirim içinde kaldığında, onunla işiniz bittiğinde belleğini boşaltmanız gerekir. Ancak, bir BSTR
arabirimden geçtiğinde, alan nesne bellek yönetiminin sorumluluğunu alır.
Genel olarak, için ayrılan BSTR
belleği ayırma ve serbest bırakma kuralları aşağıdaki gibidir:
Bağımsız değişken bekleyen
BSTR
bir işleve çağırdığınızda, çağrısından önce için belleğiBSTR
ayırmanız ve daha sonra serbest bırakmanız gerekir. Örnek: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); }
döndüren
BSTR
bir işleve çağırdığınızda dizeyi kendiniz serbest getirmelisiniz. Örnek: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);
döndüren bir
BSTR
işlev uyguladığınızda dizeyi ayırın ancak serbest etmeyin. Alıcı işlevi belleği serbest bırakır. Örneğin: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); }
Ayrıca bkz.
Dizeler (ATL/MFC)
CStringT::AllocSysString
SysAllocString
SysFreeString
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin