sbcobj.hpiはHSPのオブジェクトをサブクラス化し、oncmdライクに
子コントロールのメッセージを取得できるようにする拡張プラグインです。
どうやらobjcmd命令とonexit, oncmd命令の併用でランタイムエラーが発生することがあるらしく
以下はそのランタイムエラーの再現スクリプトです。
// pattern 1
// pattern 2
#include "sbcobj.as" input a objcmd stat, 0x100, *on_keydown onexit *on_exit // gosubにするとエラーなし stop *on_keydown return *on_exit end
要因の考察:
#include "sbcobj.as" input a objcmd stat, 0x100, *on_keydown oncmd gosub *on_command, 0x111 // こちらはgosubを抜くとエラーなし stop *on_keydown return *on_command end
pattern 1 … onexitがサブルーチン形式で呼び出されないとエラーが起きる
pattern 2 … oncmdによるサブルーチン内でreturnされずにendされるとエラーが起きる?
エラー全文:
=============================================
Microsoft Visual C++ Runtime Library
Runtime Error!
Program: C:\hsp33\hsp.exe
This application has requested the Runtime to terminate it in an unusual way.
Pleas contact the application's support team for more information.
=============================================
sbcobj.hpi自体は7年前に更新が止まっているようなのですが、
子コントロールのサブクラス化はHSPではたびたび話題にも挙がる汎用性の高いプラグインですので
今後の利用者を想定してここに解決策を掲示しておきます。