Здравствуйте 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 вызывает строка
А что тебя смущает? по-моему все нормально, ты из метода возвращаешь E_FAIL
и используешь Ptr указатели, а они при получении ошибки генерят исключение.
Перехватывай исключение try, catch и впред:
...
try
{
m_ITest->Init();
}
catch(_com_error &e)
{
// если мы попали сюда, то была ошибка у "e" можешь запросить дополнителную информацию
}
...
Здравствуйте 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(...))