Исключение HRESULT не обнаружено в VS 2008 - PullRequest
0 голосов
/ 22 апреля 2010

У меня странная ситуация в Visual Studio 2008 C ++.Я работаю над кодом, который был изначально написан для Visual Studio 2003, где все работает хорошо.Теперь, портированная на VS 2008, обработка исключений, которая, к сожалению, широко существует в коде, больше не работает.стандартный пример кода:

 try
 {
      HRESULT hr = S_OK;
      // do stuff...
      if( FAILED( hr ) ) 
          throw hr;
 }
 catch( HRESULT hr )
 {
      // error handling, but we never get here
 }
 catch( ... )
 {
      // ... not even here
 }

В VS 2008 исключение не встречается, но в другом месте происходит сбой, указывающий, что указатель стека должен быть испорчен.Кто-нибудь сталкивался с таким поведением?Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

После запуска отладчика перейдите в раздел «Отладка / Исключения» и выберите, для каких исключений отладчик должен останавливаться при возникновении исключения.

1 голос
/ 22 апреля 2010

Я получаю сбой где-то еще, указывая, что указатель стека должен быть испорчен.

Как так? Факт сбоя не имеет ничего общего со стеком. Большая проблема здесь в том, что мы не знаем, что было объявлено как «час». Если было объявлено что-то кроме HRESULT, компилятору не нужно перехватывать там.

В частности, я считаю, что определение HRESULT изменилось с VS2005 для поддержки 64-битных окон. Если hr объявлен как что-то еще, что раньше было таким же, как HRESULT, но не после установки нового Windows SDK, то это вероятная причина.

Не могу сказать больше, не увидев больше кода.

РЕДАКТИРОВАТЬ: корректно работает следующее:

#include <iostream>
#include <iomanip>
#include <windows.h>

int main()
{
    try
    {
        HRESULT hr = E_FAIL;
        std::cout << "Inside try\r\n";
        if( FAILED( hr ) ) 
            throw hr;
    }
    catch( HRESULT hr )
    {
        std::cout << "Error:" << std::hex << (unsigned int)hr;
    }
    system("pause > nul");
}

Нам нужно увидеть больше кода.

...