#include #include "uCalc.h" using namespace std; using namespace uCalcSoftware; void ucalc_call RecoveryHandler(Handle_uCalc h) { auto uc = uCalc(h); cout << "Handler: Caught '" << uc.Error().Message() << "'" << endl; // Attempt to recover by resuming execution. uc.Error().Response(ErrorHandlerResponse::Resume); cout << "Handler: Resuming execution..." << endl; } void ucalc_call RiskyOperation(uCalcBase::Callback cb) { auto input = cb.ArgStr(1); if (input == "bad") { cb.Error().Raise("A recoverable error occurred."); // After the error handler resumes, this return value will be used. } else { cb.ReturnStr("Normal_OK"); } } int main() { uCalc uc; uc.Error().AddHandler(RecoveryHandler); uc.DefineFunction("DoWork(s As String) As String", RiskyOperation); cout << "Result: " + uc.EvalStr("DoWork('good')") << endl; cout << "---" << endl; cout << "Result: " + uc.EvalStr("DoWork('bad')") << endl; }