外部例外 EEFFACE

提供: RAD Studio
移動先: 案内検索

C++Builder の例外処理 への移動

外部例外 EEFFACE は、C++ 例外が C++ 例外ハンドラで捕捉されず最終的に Delphi 例外ハンドラで処理される場合に発生するエラーです。

EEFFACE.png

このエラーは、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 を参照してください。

関連項目