Re[2]: Помогите с проблемой обработок ошибок в COM
От: AlexKn  
Дата: 23.11.01 09:03
Оценка:
Здравствуйте OlegO, Вы писали:

OO>Здравствуйте AlexKn, Вы писали:


AK>>STDMETHODIMP CTest::Init()

AK>>{
AK>> // TODO: Add your implementation code here
AK>> Error("Error out");
AK>> return E_FAIL;
AK>>}
AK>>Данный метод вызывает exception, когда я пытаюсь его вызвать из клиента
AK>> CoInitialize(NULL);
AK>> ITestPtr m_ITest;

AK>> if(FAILED(m_ITest.CreateInstance(__uuidof(TestObj))))

AK>> return -1;
AK>> if(FAILED(m_ITest->Init()))
AK>> return -1;

AK>>Отладчик показывает, что exception вызывает строка


OO>А что тебя смущает? по-моему все нормально, ты из метода возвращаешь E_FAIL

OO>и используешь Ptr указатели, а они при получении ошибки генерят исключение.

OO>Перехватывай исключение try, catch и впред:

OO>
OO>...
OO>try
OO>{
OO>     m_ITest->Init();
OO>}
OO>catch(_com_error &e)
OO>{
OO>   // если мы попали сюда, то была ошибка у "e" можешь запросить дополнителную информацию
OO>}
OO>...
OO>


Понимаешь, можно конечно делать с try и catch. Но для чего тогда используют HRESULT. Генерят то исключение не пойнтеры, а _com_issue_errorex(_hr, this, __uuidof(this)); Этого не должно быть и пропадает весь механизм получения ошибки через GetErrorInfo и GetDescription. По моему это не нормально, все примеры которые я видел работают именно на проверку
if(FAILED(...))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.