Здравствуйте, 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() лежит "описание ошибки"
}