sbcobj.hpi(オブジェクトのサブクラス化用拡張プラグイン)の不具合
ht. 2013/6/19(Wed) 14:31:17|NO.55081
kz3さんが作成された、sbcobj.hpiの不具合を見つけたので報告します。
sbcobj.hpiはHSPのオブジェクトをサブクラス化し、oncmdライクに
子コントロールのメッセージを取得できるようにする拡張プラグインです。
どうやらobjcmd命令とonexit, oncmd命令の併用でランタイムエラーが発生することがあるらしく
以下はそのランタイムエラーの再現スクリプトです。
// pattern 1
#include "sbcobj.as"
input a
objcmd stat, 0x100, *on_keydown
onexit *on_exit // gosubにするとエラーなし
stop
*on_keydown
return
*on_exit
end
// pattern 2
#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ではたびたび話題にも挙がる汎用性の高いプラグインですので
今後の利用者を想定してここに解決策を掲示しておきます。