私は、 の__try/__except
ブロックでヘルプを使ってWindowsの例外処理を実現しようとしています。プログラムが__exceptブロックに入っていない
問題は、プログラムが__except
というブロックを入力することがなく、誤って終了するという問題です。
作業領域: OS:Windows 7 x64;フレームワーク:Embarcadero XE5 C++ Builder; アプリケーションテンプレートの種類:コンソール64ビットアプリケーション(32ビットが正常に動作するために!)
コード:
void foo()
{
__try
{
int *p = 0;
fprintf(stderr, "before action");
*p = 1;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
printf("in __except block\n");
throw("");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
try
{
foo();
}
catch(...)
{
printf("in catch block\n");
}
printf("end of main\n");
return 0;
}
出力:では
before action
その後、間違って終了
私は例外ハンドラをこのように追加しました:
私はこの出力を得た。この後:
出力:
before action
in excepiton filter
その後、間違って終了
プログラムはexcept
ブロック__入っていないのはなぜ? 例外ハンドラに入った後でも正しく動作する方法はありますか? * p = 1;
'__except'を使いたい場合は' __try'を使うべきではありませんか? – SingerOfTheFall
興味深いことに、それはコンパイルすることもできます。コンパイラのバーフィングなしで混在して一致させることができれば、非常に優れたMS拡張ではありません。 – UKMonkey
@SingerOfTheFall試してみました - うまくいきません:) – Sas