1

ドキュメントには、「_set_se_translatorを使用する場合は/EHaを使用する必要があります」と記載されています。
私の質問は次のとおりです。/EHaはプロジェクト内のすべてのファイル/例外をキャッチするプロジェクト内のすべてのファイルに使用する必要がありますか、それとも_set_se_translatorを呼び出すファイルにのみ使用する必要がありますか?

4

2 に答える 2

2

例外をキャッチする関数だけでなく、例外をスローして伝播する関数にも必要です。それ自体への実際の呼び出しは、_set_se_translatorおそらく/ Ehaでコンパイルする必要はありませんが、なぜ一貫性がないのでしょうか。

于 2011-11-04T13:52:42.253 に答える
2

チェックした後、/EHaでコンパイルする必要のあるすべてのインスタンスについて以前に言われたことに同意しない必要があります。私は次のような小さなプログラムを作成しました。

  • クラッシュするコード

      __declspec(dllexport) void crashMe()  {    *((int*)0)=0;  } 
    

例外処理なしでコンパイルされたDLLで

  • try/catchの他の場所でコードを呼び出す

それで

  • 呼び出し元のコードが/EHaでコンパイルされていない限り、プログラムはクラッシュします
  • 例外なく_set_se_translator、捕まえることができるのはcatch(...)
于 2011-11-07T09:08:22.910 に答える