Windows 8 で HSP3 アプリを終了時にランタイムエラーが発生する場合の対処
昔 Windows Vista / 7 向けに作ったHSP3製アプリケーションを Windows 8 で動かすと、終了時に "Microsoft Visual C++ Runtime Library Runtime Error" が出る場合があることに気づきました。
同じ症状で困っている人もいるみたい。
なお私の場合は、onexitで別ラベルへ飛ばした後、endを実行するところでランタイムエラーが起こってしまうので原因が不明でした。
と、ここで下記情報を発見:
oncmdで飛んだ先のラベルの中だと普通のエラーがランタイムエラーになってしまうそうです。
この情報を元に下記のコードを試しに実行してみたところ、onexitでも同じようにランタイムエラーが起こることがわかりました。
onexit goto *quit *main wait 10 goto *main *quit mes "quit" error = 1 / 0 // 本来は「Error 19 : 0で除算しました」になる end
ということで、解決策として下記のようにコードを改造しました。
onexit gosub *quit quitFlag = 0 *main if quitFlag : goto *terminate wait 10 goto *main *quit quitFlag = 1 return *terminate mes "quit" error = 1 / 0 // 「Error 19 : 0で除算しました」 end
変更点は次の通り:
- onexitで飛んだ先のラベル内では終了するというフラグだけを立てる
- mainループの中で、常にフラグをチェック
- フラグを元にonexit外のラベルから終了処理ラベルにジャンプ
かっこ悪いですが、これならちゃんと Error 19 になります。
ちなみに、先に述べた拙作アプリにこの改造を行ったところ、endで何のエラーも起こらず終了してくれるようになりました。
とりあえず Windows 8 でランタイムエラーが出るようになったら、まずはこんな風に改造してみるのがいいかもしれません。