〜 基本 〜
エラーコードとその意味を教えて

HSP Error×
#Error XX in line ABC (FileName)
--> エラー内容
[ OK ]

実行時に組み込んだ覚えのない上記のようなダイアログボックスが出ることがあります。
コレはスクリプト内に、実行を続ける上で問題のある内容を処理する時に出ます。
「Error XX in line ABC」内の「XX」というのがエラーコード(後述)です。
「in line ABC」というのが、スクリプト内のABC行目で発生したことを示しています。
「(FileName)」というのが発生スクリプトファイル名で、
まだ保存していないスクリプト内で発生した場合は「(???)」と表示されます。
保存済みのファイルである場合はそのファイル名が表示されます。
「エラー内容」という所にエラーの原因が簡単に書かれています。
HSPバージョンによって表示されるメッセージの種類は異なりますが、
エラーコード内容には互換性があり、コードの一覧は下記の通りです。

1. システムエラーが発生しました

通常は表示されない致命的なエラーです。
ファイルが破損、または予期しない自体が発生した場合に出力されます。
HSP本体またはパソコン環境、スクリプトファイル等のどこにエラー要因があるか特定できませんが、
HSP自体のアーカイブファイルを再度ダウンロードして、
インストール先フォルダもできるだけルートに近い浅い階層にしてみてください。

2. 文法が間違っています

関数と命令の記述方法が間違っている時や、変数名・ラベル名が間違っている時に表示されます。
HSPのバージョンアップにより、命令の構文が変わってしまう場合や、
命令そのものがなくなったり別名に変わったりしてしまう可能性もあります。
ヘルプを見て構文に問題がないかチェックしてください。

3. パラメータの値が異常です

パラメータに指定できる各値の領域サイズは決められており、
その許容された範囲を超えてしまう(数値なら下限も含む)とフローエラーとなります。
文字列テキストの場合、HSP3以上でメモリの自動確保が行われる為に
この手のエラーは確認できません。
またHSP2.X以前でもHSPによる当エラーで終わるのではなく、
別アプリケーションのメモリ領域を破壊して強制終了する場合もあります。

4. 計算式でエラーが発生しました

演算に指定できない記号を使用する等で計算式を実行しようとすると発生します。

5. パラメータの省略はできません

用意された命令・関数にはパラメータの数が決まっています。
整数型であれば値の未設定、最終パラメータであればパラメータ自体の省略が行えますが、
それ以外では値またはパラメータ自体の省略は行えません。
文字列テキストで空を示す場合は""を指定します。

6. パラメータの型が違います

用意された命令・関数のパラメータには指定できる型が決まっています。
数値でなければならない箇所に文字列を指定していたり、その逆であったり、
数値は数値でも整数値なのか実数値なのか…
エラーが出ても原因が分からない場合は、直前で入っている値を表示してみてください。
気付きにくいのは、パラメータに指定している値が使い回ししている変数の場合です。
初めの一回目では正しい型が入っているから大丈夫と思っていても、
その後に行う処理で型の違う値を代入して、
再度対象の命令を実行している…その様なことが起こってないか要チェック。

7. 配列の要素が無効です

配列変数の要素数以上の要素に値をセットしたり、その値を参照した場合に発生します。
HSP3以降では、要素数自動拡張機能により、値のセットでは発生しなくなりましたが、
現在の要素数以上の要素値を取り出そうとした場合には、エラーとなります。

8. 有効なラベルが指定されていません

ラベルとして指定すべきパラメータが間違っている場合や、
ラベルを示す「*」の後に何もない時に表示されます。
例えば、HSP2.Xでは、button命令のラベル指定時に「*」の指定なし記述も可能ですが、
HSP3からは、「*」の指定が必須となったようです。

9. サブルーチンやループのネストが深すぎます

gosub命令、repeat命令を多重に実行しすぎた時に表示されます。
ループから抜ける処理でbreak命令を使わず、
goto命令で抜けることを繰り返していると、そのうちに発生します。

10. サブルーチン外のreturnは無効です

gosub命令が実行されずにreturn命令を実行した場合に発生します。

11. repeat外でのloopは無効です

repeat命令とloop命令は必ず一対でなくてはなりません。
尚、HSP3からはforeach命令が使えるようになり、対を成す命令がrepeat命令と同じloop命令になります。
その為、loop命令の数はrepeat命令とforeach命令を合わせたものと必ず一致します。
loop命令は、ループ開始位置を示すrepeat命令またはforeach命令に処理を戻すものですが、
ループ中にループ開始位置に戻したい場合は、continue命令を使ってください。

12. ファイルが見つからないか無効な名前です

ファイル操作をする時に、指定されたファイルが見つからなかったか、
またはアクセスできないファイルである時に表示されます。
スクリプト上でフォルダ名も含めた形で指定する場合、
フォルダの区切りは「\\」または「/」と書くようにしてください。
既に存在する名称でフォルダ作成命令を実行した時もこのエラーになります。

13. 画像ファイルがありません

picload命令で画像を読み込む際に、存在しない画像である場合に表示されます。
尚、ファイルは存在しても読み込める画像形式ではない場合も同様にエラーとなります。

14. 外部ファイル呼び出し中のエラーです

exec命令で外部ファイルを呼び出す際に、何らかの問題が発生した時に表示されます。
ファイルパスが不正である等の人為的ミスの他、確かに指定は合って実際に存在しているものの、
例えばセキュリティの関係であったりファイル自体や、
ハードディスクの一部が破損している等で読めない場合もありえます。
この問題は他のファイル操作命令も該当するわけですが、認識しておいてください。

15. 計算式でカッコの記述が違います

演算用の計算式内で使用されているカッコの記述が不正である場合や、
カッコ開始と終了の数が一致していない場合に発生します。

16. パラメータの数が多すぎます

各命令のパラメータの数は決まっており、決められたパラメータの数以上を設定した場合に発生します。
尚、数値パラメータの場合は、省略は可能ですが、
先頭(左端)ではない、途中または最後(右端)のパラメータを省略しない場合は、
省略パラメータの型枠だけは設定する意味で、コンマ「;」は設定する必要があります。

17. 扱える文字列の上限を越えています

文字列を扱う上での許容量を越えた時に表示されるようです。
スクリプト上ではなく、恐らくは変数に代入できるテキストのことを指しているかと推測できますが、
どうなった場合(例えば、メモリ量以上のワードを展開する等)に出力されるのか未確認です。

18. 代入できない変数名を指定しています

プログラマが変数名として定義していないシステム変数や予約キーワード(命令名)に対して、
変数時に使用する代入処理をしようとした場合に発生します。

19. 0で除算しました

割る数をゼロ(『A÷0』)として演算すると発生します。
HSPに限らず、電卓等で試せば確認できますが、
「あるものをゼロ等分する」というのはどのような状態を表すのか説明できません。
尚、HSP2.6から発生するエラーです。2.55以前は強制終了となってしまいます。

20. バッファオーバーフローが発生しました

変数に代入するテキストサイズが、確保している変数サイズよりも大きい場合や
変数サイズ外位置にアクセス(20バイトの変数の25バイト目を参照する等)した場合に発生します。
HSP2.6から出るようになったメッセージです。2.55以前はエラーが出ません。
尚、HSP3.0以降はメモリの自動確保が行われる為、代入では発生せず、参照時のみ発生します。

21. サポートされない機能を選択しました

パレットモードのウィンドウにフルカラー時に使用できる半透明合成コピーを実行する等、
HSPの現在時点ではサポートされていない機能を使用した場合に発生します。
HSP2.61から出るようになったメッセージです。

22. 計算式のカッコが深すぎます

計算式が複雑すぎる場合や何らかの理由で正常に計算されなかった時に表示されます。
カッコを40個程度使った式でも自分の環境ではエラーとなりませんでしたので、
表示される場合は、システムに致命的なエラーが発生したことを示していると考えられます。

23. 変数名が指定されていません

パラメータとして変数名を指定すべき場所に間違った記述がされていると表示されます。
パラメータに値を指定する命令の場合は、値(定数)または同じ型の変数を指定可能ですが、
パラメータに変数を指定しなければならない命令の場合は、値(定数)の指定をすることができません。

24. 整数以外が指定されています

小数点以下が入っていない整数値を指定すべき箇所(主に命令)で、
実数値や文字列型等の別の値を指定した場合に発生します。
尚、変数で指定した場合に、値自体は整数であっても、
変数の型が実数型である場合もエラーとなってしまいます。

25. 配列の要素書式が間違っています

配列要素の書き方が間違っている場合や、配列要素を書けない場所に書いている時に表示されます。
HSP3から、従来の「変数名.要素」の書き方と「変数名(要素)」の記述方法をサポートしています。
その他の書き方や、配列ではない等の要素指定ができない箇所に指定した場合はエラーとなります。

26. メモリの確保ができませんでした

変数の確保や動作させる為に必要なメモリの確保に失敗した場合に発生します。
メモリ以上の確保を行おうとした場合に、
使用済み領域の退避(スワップ)が行われるようになっており、通常は表示されません。
この操作に失敗するのは、致命的な問題が起こっていると考えられます。

27. タイプの初期化に失敗しました

標準型及びプラグインによる拡張型の初期化に失敗した時に表示されます。
表示される場合は、システムに致命的なエラーがあることを示しています。
特定のプラグイン使用時にのみ発生するのであれば、
当障害が起こっていることをプラグイン公開者に知らせるべきであると考えられます。

28. 関数に引数が設定されていません

HSP3からサポートされた関数のパラメータが正しく記述されていない場合に表示されます。

29. スタック領域のオーバーフローです

サブルーチン呼出や式の評価は、現在の階層情報等をスタック領域へ保持しますが、
このスタックが破壊された場合に表示されます。
表示される場合はシステムに致命的エラーが発生したことを示しています。

30. 無効な名前がパラメータに指定されています

パラメータとして無効な名称が使用されている場合に表示されます。
実態のないエイリアス(別名)やローカル変数が参照された場合にも表示されることがあります。

31. 異なる型を持つ配列変数に代入しました

1つの配列変数には異なる型の値を混在させようとしていたり、
初期化された型と異なる型の値を配列に代入しようとした場合に表示されます。

32. 関数のパラメータ記述が不正です

HSP3からサポートされた関数のパラメータ書式が間違っている場合や、
カッコが足りない時に表示されます。
関数の書き方についてはHSP入門講座をご覧ください。

33. オブジェクト数が多すぎます

ウィンドウ内に配置されるボタンや入力ボックス等のオブジェクトが
設定されている制限値を越えた場合に表示されます。

34. 配列・関数として使用できない型です

配列をサポートしていない型で配列指定をした場合や、
関数でないキーワードを関数として使用しようとした時に表示されます。

35. モジュール変数が指定されていません

パラメータにモジュール変数を指定すべき場所に間違った内容が書かれている場合に表示されます。

36. モジュール変数の指定が無効です

パラメータに指定されたモジュール変数が間違ったモジュールで初期化した場合に表示されます。
表示される場合はシステムに致命的なエラーが発生したことを示しています。

37. 変数型の変換に失敗しました

変数や値の型を変換ができなかった時やサポートされていない場合に表示されます。
主にユーザー定義型を用いたプラグイン利用時に発生します。
当障害が起こっていることをプラグイン公開者に知らせるべきであると考えられます。

38. 外部DLLの呼び出しに失敗しました

プラグインの関数呼出先のアドレス取得に失敗した場合に表示されます。
当障害が起こっていることをプラグイン公開者に知らせるべきであると考えられます。

39. 外部オブジェクトの呼び出しに失敗しました

HSP3からサポートしたCOMコンポーネントの呼出中にエラーが発生した場合に表示されます。

40. 関数の戻り値が設定されていません

スクリプト上で定義したユーザー関数のreturn命令で戻り値を設定していなかった場合に表示されます。

41. 関数を命令として記述しています

コチラで紹介しているHSP3から関数を、HSP2までの命令形式で記述している場合に発生します。


HSPのニューバージョンと共にエラートラップ総数は増えており、
今後に、既存のエラーコードに対するエラー内容が変わる場合も考えられます。
その場合は、随時に当ページも更新していく予定ですが、
都度・即時、に更新ができるものではないことと、
紹介している内容が必ずしも正しいわけではないことを予め了承願います。
ページ先頭に戻る