Господа, я думаю многим приходится выполнять серию инициализаций COM-обьектов, при этом выполнение ветки кода надо прерывать при неуспешной инициализации хотя бы одного из них. Я встречал такие решения:
HRESULT hRes = S_OK;
hRes = COMOBJECT1.Initialize();
if ( SUCCEEDED(hRes) )
{
hRes = COMOBJECT2.Initialize();
if ( SUCCEEDED(hRes) )
{
hRes = COMOBJECT3.Initialize();
... и так далее
}
}
Некрасиво...
Попадалось и такое:
HRESULT hRes = S_OK;
hRes = COMOBJECT1.Initialize();
if ( FAILED(hRes) )
goto Err;
hRes = COMOBJECT2.Initialize();
if ( FAILED(hRes) )
goto Err;
... и так далее
}
Еще хуже
Мой вариант такой инициализации:
HRESULT hRes = S_OK;
for(; ; )
{
hRes = COMOBJECT1.Initialize();
if ( FAILED(hRes) )
break;
hRes = COMOBJECT2.Initialize();
if ( FAILED(hRes) )
break;
... и так далее
// Все ОК.
break;
}
// Проверяем результат тут.
if (FAILED( hRes)
{
.....
}
Как вам такой вариант? Может гуру COM посоветуют что-то еще более красивое?
WBR, DisoP.