В статье MSDN просто сказано:
Возвращаемое значение
S_OK в случае успеха или любое стандартное значение ошибки HRESULT.
Однако, мое предположениеявляется то, что E_OUTOFMEMORY - единственно возможное возвращение ошибки, поскольку NULL является допустимым вводом, а неверное расположение в памяти просто вызовет нарушение прав доступа (надеюсь).
Итак.Есть ли другие возможные HRESULTS из этого метода?
Примечание: следующие все возвращают S_OK:
CComBSTR bstr;
bstr.AssignBSTR(NULL);
bstr.AssignBSTR(SysAllocString(L"")); //clearly a leak, abbreviated example...
bstr.AssignBSTR(SysAllocString(L"HI"));
Итог: Является ли следующая хорошая практика (и почему я часто вижу другие реализации?):
class foo {
public:
STDMETHOD(put_Bar)(BSTR p);
private:
CComBSTR m_bstrBar
};
STDMETHODIMP foo::put_Bar( BSTR p)
{
return m_bstrBar.AssignBSTR(p);
}