C++Builder5でアプリケーションを作成しています。アプリケーションで例外が発生(たとえば、AccessViolationなど)した際にエラーメッセジーを表示するダイアログが出ますが、このメッセージを任意に設定することは可能なのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/05/09 06:17:56
  • 終了:2006/05/16 06:20:03

回答(1件)

id:aki73ix No.1

aki73ix回答回数5224ベストアンサー獲得回数272006/05/09 08:57:30

ポイント10pt

可能です

まず、Headerに例外処理の関数を定義します

class TForm1 : public TForm

{

__published: // IDE 管理のコンポーネント

        TButton *Button1;

        void __fastcall FormCreate(TObject *Sender);

        void __fastcall Button1Click(TObject *Sender);

private: // ユーザー宣言

public: // ユーザー宣言

        __fastcall TForm1(TComponent* Owner);

  void __fastcall AppException(TObject *Sender,Exception *E);

};


コンポーネントの生成時などで関数のイベントハンドラを定義します

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

   Application->OnException=AppException;

}

エラー処理の一例です、E->ClassName()の値によって分岐させればメッセージをかえることが出来ます

この例では致命的エラーでプログラムを終了するか続行するか決めることが出来ます

void __fastcall TForm1::AppException(TObject *Sender,Exception *E)

{

  char str[512];

  wsprintf(str,"Crash Agent:¥015致命的エラー。終了させますか?¥015%s(%s)¥015Error Class:%s"

    ,E->Message,E->ClassName().cpychr(),Sender->ClassName().cpychr());

  if(mrOk==MessageBox(Handle,str,"Custom Error",MB_OKCANCEL|MB_ICONINFORMATION))

     Application->Terminate();

}

注意しなくてはならないのは、関数の途中で例外が発生した場合に、その関数の途中から開始することは出来ないことです

参考

  • id:tecra
    回答ありがとうございます。
    お礼が遅くなってしまい申し訳ありません。

    ぜひ試してみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません