В принципе, лучше сначало спросить про ISupportErrorInfo, но так как сервер твой и ты точно знаешь, что он IErrorInfo запостил (SetErrorInfo), то все пучком.
O$>обертка уже не гененит исключение, пытаюсь сделать это сам:
O$>
O$>try
O$>{
O$> _com_issue_errorex( IMyCompPtr->Method(), IMyCompPtr, __uuidof(IMyCompPtr) );
O$>}
O$>catch ( _com_error & er )
O$>{
O$> if ( FAILED (er.Error() ) )
O$> {
O$> // исключение прилетело,
O$> // рассматриваем er и не видим описание ошибки :(
O$> }
O$>}
O$>
O$>что не так, как все-таки вытянуть установленное в сервере описание ошибки?
Скорее всего, глотается где-то (GetErrorInfo можно вызвать только один раз). Ты попробуй просто сам получить контекст. Что-то вроде:
CComPtr<IErrorInfo> m_EI;
::GetErrorInfo(0, (void**)&m_EI); //HRESULT проверить бы надо
Если после этого ломает через m_EI работать, можно сконструировать _com_error:
Здравствуйте retalik, Вы писали:
R>Скорее всего, глотается где-то (GetErrorInfo можно вызвать только один раз). Ты попробуй просто сам получить контекст. Что-то вроде: R>
R>CComPtr<IErrorInfo> m_EI;
R>::GetErrorInfo(0, (void**)&m_EI); //HRESULT проверить бы надо
R>
действительно, GetErrorInfo помог
только вот (void**) вроде как ни к чему, GetErrorInfo принимает IErrorInfo** и еще странность, если
O$>действительно, GetErrorInfo помог
O$>только вот (void**) вроде как ни к чему, GetErrorInfo принимает IErrorInfo** и еще странность, если
O$>
O$>CComPtr<IErrorInfo> m_EI;
O$>
O$>то эксцепшены какие-то левые лезут, а если просто
O$>
O$>IErrorInfo* m_EI;
O$>
O$>и никаких Release, то все проходит тихо и гладко
Я догадываюсь, что ты все-таки _com_error используешь. В его конструкторе последний параметр означает "сделать ли AddRef интерфейсу IErrorInfo". По умолчанию стоит "не сделать". А в деструкторе он его благополучно грохает. Так что или смарт-пойнтер, или bAddRef=false.