Predator's Vision

画像処理、3D点群処理、DeepLearning等の備忘録

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 でランタイムエラーが出るようになったら、まずはこんな風に改造してみるのがいいかもしれません。