在VS 2008中没有发现HRESULT异常

时间:2010-04-22 14:16:23

标签: c++ visual-studio-2008 exception hresult

我在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 个答案:

答案 0 :(得分:1)

  

我在其他地方遇到了崩溃,表明必须搞砸堆栈指针。

怎么样?崩溃的事实与堆栈无关。这里更大的问题是我们不知道“hr”被宣称为什么。如果它被声明为除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");
}

我们需要查看更多代码。

答案 1 :(得分:1)

启动调试器后,转到Debug / Exceptions,并选择调试器在抛出异常时应停止的异常。