外部例外 EEFFACE
C++Builder の例外処理 への移動
外部例外 EEFFACE は、C++ 例外が C++ 例外ハンドラで捕捉されず最終的に Delphi 例外ハンドラで処理される場合に発生するエラーです。
このエラーは、VCL フォーム アプリケーションか FireMonkey アプリケーションのどちらかで、C++ 例外が明示的に捕捉されず VCL/FireMonkey フレームワーク内にリークする場合に発生するおそれがあります。 これらのフレームワークには、デフォルトで C++ 例外を処理する Delphi 例外ハンドラがあるため、外部例外 EEFFACE が発生します。
例
以下の例は、CppException という C++ 例外クラスを定義している VCL フォーム アプリケーションです。 このアプリケーションでは、CppException 例外を送出しますが、それを捕捉しません。 この C++ 例外は C++ 例外ハンドラで捕捉されないので、外部例外 EEFFACE のエラーが発生します。
// ---------------------------------------------------------------------------
class CppException : public std::exception {
virtual const char* what() const throw() {
return "C++ exception message";
}
};
// ---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) {
}
// ---------------------------------------------------------------------------
int myfunction(int i) {
if (i == 0) {
throw new CppException();
}
return i - 1;
}
// ---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender) {
myfunction(0);
}
この問題の詳細については、http://www.audacia-software.de/en/bcb/external-exception-eefface.htm を参照してください。