#deffunc

新規命令を割り当てる

#deffunc p1 p2,p3…

p1=命令名 : 割り当てられる命令の名前
p2~p9    : バラメータタイプ名

解説

ユーザーによる新規命令を指定します。
p1に新規命令の名前を、p2以降に呼び出しパラメータタイプを指定します。
#deffunc命令で定義した位置より以降は、指定された名前を命令語として
使用することが可能です。

新規命令は、#deffuncで指定された行以降が実行される内容になります。
実行はgosub命令と同じくサブルーチンジャンプとして行なわれ、
return命令でもとの実行位置に戻ります。

追加された新規命令では8つまでのパラメータを指定できるようになります。
それぞれのパラメータに指定できる型はp2~p9で指定します。
指定するパラメータタイプには以下のものがあります。

   パラメータタイプ名     内容
---------------------------------------------------
               int        数値
               str        255文字以下の文字列
               val        変数

たとえば、

#deffunc test val,str,int

のように指定すると、以降はtestという命令が使えるようになり、

test 変数, 文字列, 数値

のようにパラメータを指定できるようになります。
ただし、バラメータタイプの指定には、いくつかの制限があります。

  1. strタイプで渡せる文字列は255文字以下

	モジュールに文字列を渡す場合には、基本的に255文字以下
	となります。それ以上の文字数を持つ文字列を渡す場合は、
	変数を経由するようにしてください。

  2. val,strタイプは、最初の2つのみ指定可能

	valおよび、strのタイプ指定は最初の2つにのみ可能です。
	つまり、3番目以降のパラメータはすべてintとなります。

それぞれのパラメータは、mref命令のローカルパラメータとして取り出す
ことが可能です。mref命令については、mref命令詳細を参照してください。

	#deffunc 名前 onexit

のように、引数を記述する部分に「onexit」を入れることで、
HSPのプログラムが終了した場合に、その命令が自動的に実行されます。
ただし、この命令内では以下の点に注意してください。

・endstopwaitawaitdialogなど時間待ちが起こる命令は使用できません
・mesなど画面に出力する命令は機能しません

つまり最低限のメモリ解放や外部DLLの呼び出しなど最終的に行なわれる作業だけを
記述するものと考えて下さい。
同様の動作をするものにonexit命令がありますが、システムの処理としては

		[HSPのプログラムを中断]
					↓
		[onexit命令の飛び先を実行]
					↓
		[モジュールのクリーンアップ先を実行]
					↓
		[HSPリソースの完全な破棄]

という順番になっています。
onexit命令の飛び先では、プログラムを中断すること自体を中止することも
可能ですが、クリーンアップ機能の場合は中断はできません。
また、複数のモジュールや、複数のクリーンアップ命令が登録された場合には、
登録された順番とは逆順に辿って次々に実行されていきます。

関連項目

#globalモジュールの終了
#moduleモジュールの開始
mref特殊なメモリを変数に割り当てる

サンプル逆引き (7)

macro_new2.as
mod_getenv.as
modtest2.as
modtest3.as
modtest4.as
module_test3.as
module_test4.as

情報

バージョン2.61
作成日2004/03/01
著作者onitama
URLhttp://www.onionsoft.net/
備考ver2.61標準命令
タイプ内蔵命令
グループプリプロセッサ命令
hs ファイルhsphelp\i_prep.HS