[ Home | Programming Tips | Mail ]
OSの Callback中から Callbackの外へ C++ Exceptionを throwしてはいけません。Cの longjump()で Callback外へ jumpするのも同じくだめです。
少し考えれば理由は解りますが、C++の Exceptionは OSレベルのサポートではありませんので勝手に Stackを Rewindしてもつじつまが合う保証はありません。また仮に Stack等 Low Levelでのつじつまが合ったとしても OSが Callbackを呼ぶため等に設定した内部 Stateをそのままにしますので、どこかで破綻を来して Crashします。
必ず以下の様に Codingし全ての Exceptionを catchして returnします。
pascal Boolean AlertFilter(DialogPtr inAlert,...)
{
Boolean eventHandled = false;
try {
// do some PowerPlant operations
// :
// :
}
catch (...) {
// eat all exceptions
}
return eventHandled;
}
この Pageは MacOS X + Radio UserLand で作っています。