Показать сообщение отдельно
Старый 09.12.2004, 13:05   #4  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Действительно... происходящее можно объяснить тем что акспта где то внутри класса COM вместо кода

if ( FAILED( dispIface.Invoke( ... ) ) )
{
// raise error
}

использует

if ( dispIface.Invoke( ... ) != 0 )
{
// raise error
}

в ком-объектах почти все методы по идее должны возвращать значение типа HRESULT, нулевое значение которого (или константа S_OK) означает полный успех операции. Но значение это комплексное, разбито на битовые маски, из которых только часть означает фатальную ошибку.
Вот часть файла winerror.h, для прояснения ситуации:

PHP код:
//
// Generic test for success on any status value (non-negative numbers
// indicate success).
//

#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)

//
// and the inverse
//

#define FAILED(Status) ((HRESULT)(Status)<0)


//
// Generic test for error on any status value.
//

#define IS_ERROR(Status) ((unsigned long)(Status) >> 31 == SEVERITY_ERROR)