Серия COM-вызовов
От: disop Украина  
Дата: 14.04.03 09:25
Оценка:
Господа, я думаю многим приходится выполнять серию инициализаций 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.