HSPのエラー番号の意味と対処 Yahoo!ブックマーク に追加 はてなブックマーク に追加

Windows向けの無料プログラミングツールHSP(HSP3)で表示されるエラーダイアログ「HSP Error (内部エラー)」。

HSPの開発環境に付属しているリファレンス『プログラミングマニュアル1・基本仕様ガイド (hspprog.htm)』の「4.HSPの基本動作概念」→「エラーメッセージ」でHSPエラーの全リストが掲載 されてるので、まずはチェックしてみてください。HSP 3.2以降は総合インデックスに「エラーメッセージ一覧(error.htm)」の項目があります。HSPWikiにも情報があります。

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

エラー番号

いくつかのHSPエラー番号の意味と対処法をちょこっと書き出しておきましょう。別ページで詳しく説明してるエラーあり。

HSPエラー1 システムエラーが発生しました
 「システム」となってはますが、HSPエラー2〜41として定義されてない問題が起きた場合にこれが表示されるようになってます。基本的には処理に問題がある何かしらのコーディングミスがあると考えてください。
HSPエラー2 文法が間違っています
 読んで字のごとくです。HSPヘルプブラウザで命令や関数の説明をよく確認して、パラメータを間違えてないか確認してください。また、「HSP」+「(命令・関数名)」のようなキーワードで、GoogleYahoo!で検索すればサンプルもヒットするはず。(ただ、HSP2時代のソースコードもあるので注意)
 HSP拡張プラグインの命令を利用しているならば、そのプラグインのヘッダーファイル(「*.as」ファイル)をスクリプト内でちゃんとインクルード(#include命令)してるか確認を。
HSPエラー6 パラメータの型が違います
 HSPには整数値型、文字列型などがありますが、命令や関数のパラメータで指定すべき「型」(かた)が間違ってます。たとえば、pos命令は整数値、または整数値が代入されてる変数を指定しないといけません。ここで「"」(ダブルクオート)で括られた文字列、または文字列が代入されてる変数を指定するとエラーです。
 特に数字は注意が必要で、整数値としての数値なのか、文字列としての数値なのかを間違えないようにしてください。(int関数を使えば文字列の数字を整数値に変換可能、型をチェックできるvartype関数もある)
HSPエラー7 配列の要素が無効です
 配列変数がらみで何かしらの問題がある場合に表示されます。dim命令やsdim命令での、変数のバッファ確保も忘れずに(→エラー番号20)。
HSPエラー8 有効なラベルが指定されていません
 ラベル名「*〜」がらみで何かしら問題があります。打ちミスなどで存在しないラベルを指定してる、ラベル指定のパラメータを忘れてる。
HSPエラー9 サブルーチンやループのネストが深すぎます
 repeat-loop命令のループ処理に問題があります。ネストは「(ループの)深さ」のことです。ループを強制的に抜ける場合はbreak命令、ループの先頭に戻る場合はcontinue命令を利用し、一時的に抜ける場合はgosub命令やbutton命令(gosubタイプ)を利用します。ループ中にgoto命令やbutton命令(gotoタイプ)の処理を絶対に行わないようにしてください。
HSPエラー10 サブルーチン外のreturnは無効です
 サブルーチン処理を行うgosub命令は、ジャンプ先で必ずreturn命令で処理を戻す「gosub〜return」の組み合わせが必要です。goto命令やbutton命令(gotoタイプ)の処理でサブルーチンの途中から抜けだしてしまうような誤った処理です。
HSPエラー12 ファイルが見つからないか無効な名前です
 何かしらのファイル読み込み処理やフォルダ関連の処理で、指定の場所に読み込みたいファイルが存在しない場合に表示されます。
HSPエラー13 画像ファイルがありません
 画像ファイルを読み込んで表示するpicload命令の処理で起こります。
HSPエラー14 外部ファイル呼び出し中のエラーです
 外部プログラム(実行ファイル)を起動するexec命令に問題があり、起動実行に失敗してます。何かしらパラメータの指定ミスがあるか、無効なパラメータを指定してると考えられます。
HSPエラー16 パラメータの数が多すぎます
 読んで字のごとくです。命令や関数のパラメータ(引数)の数が多すぎます。たとえば、mes命令のパラメータは1つ、pos命令はパラメータは2つです。それよりもたくさんのパラメータを指定してしまうとエラーになります。ヘルプブラウザで命令や関数の説明をよくチェックしてみてください。パラメータの区切りは半角「,」(コンマ)です。「.」(ピリオド)ではありません。
 また、if命令で「{ 〜 }」の閉じ忘れでもこのエラーが表示されます。
HSPエラー19 0で除算しました
 「除算」とは割り算(÷)のことで、HSPの演算表現で言うと「/」(スラッシュ)、余りを出す「\」(円記号)の部分に問題があります。たとえば『10÷0=?』のように、0で数値を割ることは数学的に不可能なのでエラーになります。
 また、「/」か「\」を含む文字列を「"」でくくり忘れてる場合にも表示されます。
HSPエラー20 バッファオーバーフローが発生しました
 変数の領域バッファのデータが想定したサイズからオーバーフロー(溢れる)した場合に表示されます。コップを1つ用意しといたら、そこにバケツ1杯分の水を注がれたような感じです。
 変数の領域サイズをsdim命令であらかじめ確保しておくか、memexpand命令で拡張してください。
HSPエラー21 サポートされない機能を選択しました
 機能として利用できない処理があります。文字列から数値を演算(減算−、乗算×、除算÷)している、パレットモードのウィンドウでgmode命令(モード3以降)のgcopy命令を行う、axobj命令のActiveXコントロールを利用できない環境、objprm命令で存在しないオブジェクトIDを指定してる、などなど原因は多数あり。
HSPエラー33 オブジェクト数が多すぎます
 オブジェクトを大量に設置するような処理になってませんか?
HSPエラー38 外部DLLの呼び出しに失敗しました
 HSP拡張プラグイン(*.dll、*.hpi)を実行ファイルと同じ場所(フォルダ)に存在しない時に表示されます。また、拡張プラグインとその拡張命令の定義ファイル(*.as)のバージョンがずれてる場合にも起こりえます。
HSPエラー40 関数の戻り値が設定されていません
 ユーザー定義関数(#defcfunc)で、用意した関数の結果を返すreturn命令にパラメータを指定していません。必ず関数そのものが結果を返すようにしてください。
HSPエラー41 関数を命令として記述しています
 エラー文字列そのまんまです。HSP2時代は命令形式だったものが、HSP3では関数形式に仕様変更したものがあり、書き方が変わったものがいくつか存在します。(strmid関数、int関数、instr関数、rnd関数などなど)
- #Error:SJIS space code error in line (行数)
 HSP3スクリプトエディタ上でのみ表示されるエラー。通常は目に見えないので気づかない場合がありますが、スクリプト内に全角スペースが含まれてます。コメントアウト内や「"」(ダブルコーテーション)内の文字列以外で、全角スペースがあってはいけません。
 HSP3スクリプトエディタの設定で[エディタ]→[表示]に「非文字の可視化」という項目があるので、ここの「全角スペース」にチェックを入れておいておくと、全角スペースを「□」マークで表現してくれるので、エラーを未然に防げます。

掲示板で聞く

自分でデバッグするなど努力してHSPエラーを解決できなかった場合、最終手段として他人に聞くのも1つの手です(質問掲示板の紹介)。だた、質問の際は次のようなポイントを忘れずに。

□ エラーになるというソースコード本体を提示してください。

よく文章だけでエラーの状況を説明する人がいます。エラーメッセージやエラー番号の情報だけ、単に「動かない」「変になる」という嘆きだけの投稿では、返答者には状況がいまいち分かりません。 返答者が提示されたスクリプトをそのまま動かして問題を確認できるのが理想です。

□ エラーになるという状況を詳しく説明してください。

返答者はエスパーではないので、質問者の状況はまったく分かりません。どのようにのしたらエラーになるのか詳しく状況を説明してください。場合によっては環境(OS名)、HSPのバージョンも提示してください。

□ 提示するソースコードはコンパイルできるもので。

HSPエラーになるという部分だけをソースコードから切り出して質問する人がいます。一部のコードだけでは返答者が全体を把握できない可能性があります。また、必要な外部ファイル(テキストファイル、画像ファイルなど)があるなら提示を、提示できないなら外部ファイルがなくても動作するスクリプトコードにしてください。

□ 提示するソースコードは必要最小限度で。

逆にものすごい大量のソースコードを提示されても困ります。読む側の気持ちを考えてください。返答者は提示されたコードの事前知識は0のことが多いので、何をしている部分かを説明するコメントも付けるようにしてください。

キーワード de HSP

HSPミニ講座

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