0

Visual Studio 2008C++で状況が悪化しました。私は元々VisualStudio2003用に作成されたコードに取り組んでおり、すべてがうまく機能しています。現在、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では、例外は発生しませんが、どこかでクラッシュが発生し、スタックポインタを台無しにする必要があることを示しています。誰かがこの行動に出くわしましたか?どんな助けでも大歓迎です。

4

2 に答える 2

1

デバッガーを起動した後、[デバッグ] / [例外]に移動し、例外がスローされたときにデバッガーが停止する例外を選択します。

于 2010-04-22T15:06:05.690 に答える
1

どこか別の場所でクラッシュが発生し、スタックポインタを台無しにする必要があることを示しています。

どうして?クラッシュの事実は、スタックとは何の関係もありません。ここでのより大きな問題は、「hr」が何として宣言されたかがわからないことです。HRESULT以外で宣言された場合、コンパイラーはそこでキャッチする必要はありません。

具体的には、64ビットウィンドウをサポートするために、HRESULTの定義がVS2005で変更されたと思います。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");
}

より多くのコードを見る必要があります。

于 2010-04-22T14:24:58.030 に答える