HSP Tips 9

Last Update : 2007/05/xx

HSPの全般的なプログラミング情報のトピックスをイーロイーロ。(OwO)/

HSP3 エラー

 HSP3(HSP 3.x)のスクリプトエディタが表示する若干マイナー(?)なエラー表示をテキトーに拾ってみーる。(「*」は行数)

  1. #Error:symbol in use in line *
    → モジュールやプラグインのヘッダーファイルを読み込んで、「#deffunc」命令や「#func」命令による同名のユーザー定義命令や関数が別に存在していませんか? 命令名が被って競合してしまう形になると表示されるエラーです。

  2. #Error:no default parameter in line *
    → 一部マクロ定義されている命令や関数を呼び出した場合に表示される場合があります。HSP3スクリプトエディタの[HSP]メニュー→[HSP拡張マクロを使用する]が有効になっているか確認してください。
    → HSP2時代に命令として用意されていたものが、HSP3から関数形式で切り替わったものがいくつか存在します。正しい書き方をしているか確認してください。(→ 参照、関数の解説)

  3. #Error:SJIS space code error in line *
    → スクリプト内に全角スペースが含まれていませんか? 「""」で括った文字列やコメントアウト文以外で、スクリプト中に全角スペースがあってはいけません。手近な対策として、HSP3スクリプトエディタの[ツール]メニュー→[オプション]より[エディタ]→[表示]ツリーの[非文字の可視化]の機能を利用してみてください。(→ 参照、HSP3スクリプトエディタの設定ダイアログ)

  4. 互換性のない拡張命令タイプを使用しています
    → HSP2時代のプラグインを利用していませんか? HSP3は互換機能によりHSP2製プラグインも基本的に利用可能ですが、完全な互換はありません。プラグインのヘッダーファイル内に対応していない「#func」命令定義が存在する場合に表示されます。その命令定義をコメントアウトしておく形の対処しかありません。(→ 参照、HSP Tips : HSP3から2向け拡張プラグイン利用)

  5. パラメータの型が違います (mesbox命令)
    → メッセージボックスオブジェクトを設置するmesbox命令で、第1パラメータに指定した変数がが数値型の場合、このエラーが表示されます。たとえば第1パラメータに変数「a」を指定したならば、その前段階で「a=""」または「sdim a, ***」で文字列型変数にしておく必要があります。

↑TOP↑

Windows XP環境のLunaを無効にする

 Windows XP では新たなユーザーインターフェイスとして 「Luna」(ルナ) が採用されています。HSPは3.0から正式にXP環境でのLuna化を実装しており、例えばボタンの外観が従来(クラシック)の無機質な灰色表示から光沢表示になっています。

 HSP 2.xではこのLuna化は正式には対応していません。自前で対応したい場合は、「HSP製実行ファイルの XPビジュアルスタイル化」を参照。

 話も元に戻し、XP上で以前の環境(Windows 9x、2k) を想定した表示で動作テストを行いたい場合の手段を2つ挙げておきます。

・ Windows の[画面のプロパティ]ダイアログで、[デザイン]タブの[ウィンドウとボタン]から「Windows XP クラシック スタイル」に変更します。これによりWindows全体が従来のクラシックデザインになります。(HSPとは話がずれますが、このLunaはPCのパフォーマンスを低下させる原因の1つになっているので、見た目にこだわらない人は無効にしておくとよろし。

・ Windows全体のLuna化を無効にしたくないならば、特定のファイルだけクラシック表示にすることが可能です。HSP 3.0 の本体に含まれる hsp3.exe ファイル を選択し、右クリックメニューのプロパティダイアログから[互換性]タブの[ディスプレイ表示]→[視覚テーマを無効にする]を有効にします。

 で、上の方法は、あくまで自分の環境下における話。実際にHSP 3.0で実行ファイルを生成すると、出力されたファイルには、Lunaで表示するためのデータ(manifestファイル)が含まれています。(ちなみに、今まで公開されていたHSP用アイコン書き換えツールが利用できなくなってしまった原因がこのデータの存在だったりします。

 どのような環境下でも従来のクラシックスタイルで表示される実行ファイルを用意したい場合には、このデータを除去しなくてはなりません。海外製ソフトのリソースエディタ 「Resource Hacker」 (リソースハッカー) などを利用します。

↑TOP↑

16進数を10進数に変換

 HSPでは、先頭に「0x」または「$」(ドルマーク)を付けた数値を16進数とみなします。この16進数文字列を10進数に変換する裏技的?な手法として、「$」を付けてint命令(HSP 2.x)やint関数(HSP 3.x)にほうり投げてやる、というのがあります。

;	16進数文字列 → 10進数数値 (HSP 2.x のコード)

	binary = "FF"	; 「$FF」や「0xFF」も可

	value = "$" + binary
	int value	; int命令

	mes value
	stop
;	16進数文字列 → 10進数数値 (HSP 3.x のコード)

	binary = "FF"	; 「$FF」や「0xFF」も可

	value = int ("$" + binary)	; int関数

	mes value

 ちなみに、10進数文字列から16進数に変換するには、str命令(HSP 2.x)やstrf関数(HSP 3.x)を利用しましょう。

;	10進数数値/10進数文字列 → 16進数文字列 (HSP3.xのコード)

	x = 100
	mes strf ("%#x", x)

	y = "100"
	mes strf ("%#x", int (y))

↑TOP↑

<< HSP Tips 8 || HSP Tips 10 >>

Copyright © 2005-2012 . All rights reserved.