当您创建 BSTR的并将它们使用以避免内存泄漏的它们在COM对象之间时,必须注意在将内存的。 但是,那么,当 BSTR 通过在接口外时,接收的对象对其内存管理的责任。
通常,分配和释放为 BSTR分配的内存的规则如下:
-
例如:
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); } -
例如:
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); -
例如:
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); }