Я получаю сбой где-то еще, указывая, что указатель стека должен быть испорчен.
Как так? Факт сбоя не имеет ничего общего со стеком. Большая проблема здесь в том, что мы не знаем, что было объявлено как «час». Если было объявлено что-то кроме 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");
}
Нам нужно увидеть больше кода.