Re: Как по-человечески вернуть описание ошибки из COM на ATL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 28.07.03 17:21
Оценка:
Здравствуйте, fbr, Вы писали:

fbr>Пардон за тупой квесчн, просто скока не пробовал и читал МСДН — ничего не получается.

fbr>Надо вернуть из COMа свой error description(процедура возвращает не S_OK или S_FALSE) например то что возвращает GetLastError. Как можно это сделать (пробовал определить свой код ошибки и поюзать ATLные ф-ции Error — нифига не выходит, интерфейс подерживает ISupportErrorInfo)?

в COM-объекте перед выходом из метода:

        Error( "описание ошибки" );
        return E_FAIL;


в программе, которая использует COM-объект:
если обертка для COM-объекта создавалась через
#import "mycom.dll"  no_namespace named_guids

то просто:
try
{
// вызов метода COM-объекта
}
catch ( _com_error & er )
{
  // в  er.Description() лежит "описание ошибки"
}


если через
#import "mycom.dll"  raw_interfaces_only, no_namespace, named_guids

то информацию об ошибке нужно предварительно вытащить
HRESULT hres;
IErrorInfo* pErr = NULL;

try
{
    hres = ....// вызов метода COM-объекта

    if ( FAILED( hres ) )
    {
        GetErrorInfo( NULL, &pErr );
        _com_raise_error( hres, pErr );
    }
}
catch ( _com_error & er )
{
  // в  er.Description() лежит "описание ошибки"
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.