HSP命令講座 <#include命令>

Last Update : 2007/04/xx

PR 話題のPCゲームをチェック!

#include命令

 HSPのソースコード同士をコンパイル直前に結合するプリプロセッサ命令です。

 #include "インクルードするHSPスクリプトファイル名"

 プログラムが巨大になればソースコードの量も多くなります。1つのファイルに全部の処理を記述するとなると、コーディングやデバッグが大変になります。そこで、内部の処理を振り分けてスクリプトファイル自体も複数用意するわけです。

↑TOP↑

#include命令 サンプル1

 たとえば、「hoge.hsp」というスクリプトファイルが存在するとします。そして、「hoge.hsp」をインクルードしたメインのスクリプトをコンパイルしたとします。

//	「hoge.hsp」というファイル名で保存

	color 255
	mes "ハロー、ワールド"
//	コンパイルするメインのスクリプト

;	hoge.hspをインクルード
#include "hoge.hsp"

	font "MS ゴシック", 20
	mes "やあ! こんにちは"

 上のスクリプトはコンパイル直前に下と同等の処理内容になります。つまり、#include命令の部分がインクルードしたファイルのデータに置き換わるわけです。

//	コンパイルするメインのスクリプト

	color 255
	mes "ハロー、ワールド"

	font "", 20
	mes "やあ! こんにちは"

↑TOP↑

#include命令 サンプル2

 HSPの開発環境本体に存在する「common」フォルダは、HSPのヘッダーファイルやモジュールファイルなどを入れておくためのフォルダです。HSP 3.2では次のようなファイルが用意されてます。

Win32 API関数の宣言が書かれたヘッダーファイル advapi32.as、comctl32.as、comdlg32.as、gdi32.as、kernel32.as、ole32.as、shell32.as、user32.as、winmm.as
HSP拡張プラグインのヘッダーファイル e3dhsp3.as、hgimg3.as、hgimg.as、hgimgx.as、hsedsdk.as、hsp3imp.as、hspcmp.as、hspcv.as、hspda.as、hspdb.as、hspdx.as、hspext.as、hspinet.as、hspogg.as、hspsock.as
モジュールファイル,
マクロファイル
form_decode.as、hsp3util.as、hspmath.as、mod_aht.as、mod_fontdlg.as、mod_getenv.as、mod_img.as、mod_joystick.as、mod_menu.as、mod_rss.as、obj.as、d3m.hsp

 たとえば、「hsp3util.as」にはいろいろなモジュール命令が定義されてます。このファイルをインクルードすることで、モジュール命令を利用できるわけです。commonフォルダ内のファイルは、#include命令で「common\\」というパス指定はいりません。

//	スタティックテキストオブジェクト

;	モジュールをインクルード 
#include "hsp3util.as"

;	スタティックテキストの設置
	statictext "あいーん", 100, 20

	wait 100

	repeat
;		スタティックテキストの表示文字列変更
		statictext_set 0, ""+cnt

		wait 50
	loop

モジュール命令の説明はモジュール内を参照してください。モジュールを作成したい場合は、HSP本体の「docs\module.htm」の『モジュール機能ガイド(中上級者向け)』を読んでください。

↑TOP↑

注意点

 また、この#include命令の処理内容を勘違い(混同)する人がときどきいます。要はこの#include命令は実行ファイルにファイルを埋め込む命令ではありません。

[1] プログラム制御命令で処理を振り分けできない

 if命令やswitch命令のようなプログラム制御命令でプリプロセッサ命令の#include命令を振り分けることはできません。コンパイルエラーになります。

//	× こんな指定は無理

	if a = 1 {
		#include "hoge1.hsp"
	} else {
		#include "hoge2.hsp"
	}
//	○ 対処

	goto *main

#include "hoge1.hsp"
#include "hoge2.hsp"

*main

	if a=1 {
;		hoge1.hspファイルに「*hoge1ラベル+return」の処理
		gosub *hoge1
	} else {
;		hoge2.hspファイルに「*hoge2ラベル+return」の処理
		gosub *hoge2
	}

[2] HSPのPACKFILE(パックファイル)機能とは無関係
 実行ファイルにファイルを埋め込むことができるPACKFILE(パックファイル)機能とは何の関係もありません。PACKFILE機能が目的ならば、プリプロセッサ命令の#pack命令と#epack命令、HSPスクリプトエディタのPACKFILE編集が該当します。

 #include命令で指定するファイルは、HSPのスクリプトファイルです。つまり、拡張子が「*.hsp」か「*.as」の2択しかありえません。(HSP2の場合は「*.as」だけ)

//	× こんな指定は100%ありえない

#include "hoge.wav"
#include "hoge.bmp"

[3] 実行ファイルになった時点でインクルードしたファイルの読み込みは不可能
 実行ファイルになった時点で、#include命令で指定したファイルを読み込むことはできません。コンパイルの時点でスクリプト同士は完全に結合されているので、実行ファイルの内部には#include命令に相当するデータは存在しません。

//	× こんな指定は通常ありえない

#include "hoge.hsp"

	notesel buf
	noteload "hoge.hsp"

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.