HSPエラー41 「関数を命令として記述しています」

WindowsプログラミングHSP(HSP3)のエラーメッセージ「HSP Error」(HSPエラー)エラーの番号は「41」。エディタ上のコンパイル実行では『関数を命令として記述しています』のメッセージ。実行ファイルでのエラーメッセージは『内部エラーが発生しました(41)』。

原因は呼んで字のごとく関数形式でコーディングしてない部分があるためです。HSP2時代は命令形式で提供されていたものが HSP3では関数形式に変更されて、書式(書き方)が変わったものがいくつか存在します。HSP2→HSP3のバージョンアップにあたって、 一部の互換を捨てた一環です(HSPのバージョン変遷)。

HSP付属マニュアル『以前のバージョンからの変更点(アップデートガイド) (update.htm)』や、ヘルプブラウザで 関数(旧命令)の説明を今一度確認してみてください。

ちなみに、HSPスクリプトエディタの[HSP]→[HSP拡張マクロを使用する]にチェックはちゃんと入ってますか? デフォルトでは有効になってるんですが、チェックが入ってないとコーディングミス以前にHSPエラーが表示される場合が多いです。(HSP 3.2以降では、このメニュー項目は撤廃されてます)

関数形式に切り換わったもの

元命令形式だったものをテキトーに挙げると、strmid関数、rnd関数、peek関数、wpeek関数、strlen関数、sysinfo関数、dirinfo関数、 getpath関数、instr関数、int関数、str関数などです。HSP2ではこれらの命令の第1パラメータに取得した結果を返すための変数を指定してましたが、関数形式になった ことで、関数そのものが結果を返すため不要になりました。

たとえば、乱数を発生させるrnd関数を例にしましょう。
 従来はパラメータが2つ存在しました。第1パラメータは乱数の結果が返る変数、第2パラメータは乱数の範囲 です。HSP3では関数形式により第1パラメータは不要になるので、乱数の範囲を指定するパラメータだけ になってます。

//	A. HSP2の場合
	rnd value, 100
	mes value
//	B. HSP3の場合 (その1)
	value = rnd(100)
	mes value
//	C. HSP3の場合 (その2)
	mes rnd(100)

上の(A)と(B)のコードを比較すると、関数導入の利点にピンとこない人がいるかもしれませんが、 HSP3では(C)のようによりシンプルなコードが書けるようになりました。変数valueに結果をいったん代入する までもなく、そのままmes命令へ指定できます。

例を挙げるときりがないので、他はHSP付属のサンプルで実例をチェックしてくだされ。(^_^)

☆ str命令とstr関数

多くの旧命令は書き方が変わっただけで処理内容に違いはほとんどありませんが、唯一機能も変更されたのが str関数です。HSP3では数値を文字列に変換する機能のみサポートしていて、それ以外の機能、たとえば16進数 文字列への変換、桁揃えは新規のstrf関数が担います。

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク