static int
MyReplacementExit(ClientData unused, Tcl_Interp *interp, int argc, const char *argv[])
{
// Tcl_DeleteInterp(interp);
// Tcl_Finalize();
return TCL_OK;
}
int main() {
Tcl_Interp *interp = Tcl_CreateInterp();
Tcl_CreateCommand(interp, "exit", MyReplacementExit, NULL, NULL);
Tcl_Eval(interp, "exit ; puts 11111111");
std::cout << "22222222222" << std::endl;
return 0;
}
exit
Tcl インタープリターのコマンド評価を処理する必要があります。デフォルトでは、それ自体を削除しようとし、std::exit
プログラム全体を閉じる呼び出しも行います。それは私が望むものではないので、カスタム proc に置き換えようとしています。終了ハンドラー proc でインタープリターを削除する必要はありません (後で実行できます)。コマンドの後にexit
コマンドの評価を続行しない場合にのみ必要です。
このコードではMyReplacementExit
、何らかの方法で proc を変更する必要があるため、11111111
印刷されませんが、印刷
22222222222
されます。
TCL_ERROR
これは procから戻ることで実現できますがMyReplacementExit
、他のエラー状況とこれを区別することはできません。