HSPで実行ファイルを作成 Yahoo!ブックマーク に追加 はてなブックマーク に追加

ゲームやツールの製作が可能な無料のお手軽Windowsプログラミングツール「Hot Soup Processor」(公式サイト「HSPTV!」)でコーディング(サンプル)したプログラムのソースコード(*.hsp/*.as)を友人に渡しても、その渡された人のパソコンに「Hot Soup Processor」(HSP)の開発環境が導入さていないと実行できません。
 もちろん、ソースコードそのものは単なるテキストデータなので、メモ帳なんかでコードそのものはチェックできますが・・・。(^^;

マイ・ホームページやマイ・ブログをHSPプログラミング自動登録型リンク集に無料登録してってね! アクセスアップ効果はさしてなし! そんなわけで、Windows上であれば誰もがアプリケーションとして単体起動できる実行ファイル・EXEファイル(*.exe)を出力する必要がでてきます。そうすることで、自作プログラムを自分のホームページ上で公開することもできます。
 HSPは基本的にMicrosoftのVisual Basic(ビジュアルベーシック)で言う「VBランタイム」というようなものはないので、実行ファイル単体で配布できます。

ここではHSP3で実行ファイル(*.exe)を作成する方法をカンタンに紹介しましょー。(HSPの対応動作環境

ついでに言うと、HSPはコンパイラタイプの言語ではないので、HSP拡張プラグイン(*.dll、*.hpi)そのものの作成は不可能です。機械語を理解してる人であればツール的なものを製作できなくはないでしょうが。過去にPEフォーマットを吐くツールの作成にチャレンジされた方というのは存在します。(HSP開発wiki - MakeHPI

作成方法 その1

スクリプトエディタの[HSP]メニュー→[START.AXファイル作成]を行います。そして、[ツール]メニュー→[PACKFILE編集]で「start.ax」などをパックファイルとして追加します。それから、[ツール]メニュー→[EXEファイル作成]で実行ファイルを出力します。

これはHSP2時代からサポートしてる旧方式になりますなぁ。(詳しくはPACKFILE編集のページ)

作成方法 その2

こちらが新方式。作業はかな〜り楽ですよ。
 旧方式みたいにPACKFILE編集などは別に行わないで、スクリプトエディタの[HSP]メニュー→[実行ファイル自動作成]を単純にクリックするだけ!

HSPスクリプトエディタのメニュー項目「実行ファイル自動作成」を選択

実行ファイル自動作成で出力されるHSP製実行ファイル 「実行ファイルを作成しました」というダイアログとともに、デフォルトでは「hsptmp.exe」というファイル名の実行ファイルが出力されます。

これを後からリネーム(ファイル名変更)してもOKなんですが、スクリプト内でプリプロセッサ命令「#packopt」(nameキーワード)を指定しとくと、出力ファイル名を指定しておけます。

#packopt name "hogehoge"

	mes "Hello World!"

たとえば、上のようなコードを書いたとすると、自動作成で「hogehoge.exe」というファイルが出力されます。拡張子は指定しなくてOK。この実行ファイルを起動すれば、「Hello World!」という文字が表示されるウィンドウが開くはず。(HSPスクリプトの例

→ 関連、実行ファイルのアイコン書き換えるには?

PACKFILE機能 (実行ファイルに外部ファイルを埋め込む)

HSPには実行ファイル内に別のファイルをそのまま埋め込むPACKFILE機能(パックファイル)をサポートしてます。基本的には画像ファイル(*.bmp/*.gif/*.jpg)、音楽ファイル(*.wavのみ)、テキストファイル(*.txt)をパックの対象とした機能です。HSP拡張プラグイン(DLLファイル)自体はパックできません(正確にはパックする意味がない)。

#packopt name "hogehoge"

#pack "hogehoge.gif"	; 素でパック
#epack "hogehoge.wav"	; 暗号化してパック

	mes "Hello World!"

「方法 その1」で紹介した実行ファイル作成法では、旧式のPACKFILE編集ダイアログで これらのファイルを追加する作業を毎回手動で行う必要がありますが、「方法 その2」の場合は、上のようにプリプロセッサ 命令の「#pack」or「#epack」であらかじめスクリプト上に指定しておけます。
 「#pack」と「#epack」は、パックするファイルを暗号化するかしないかの違いです。

この時、start.axファイルを指定する必要はありません。旧式のPACKFILE編集と違って、自動的に暗号化指定で パックされます。

☆ 実行ファイルを起動したら「HSP Error 内部エラーが発生しました(38)」

かなーり頻繁に見かける事例。
 さっそく作成した実行ファイルを起動してみたところ、いきなりエラーダイアログ! エラー番号は38。あなたは HSP拡張プラグインがサポートする命令を利用してませんか?

HSPに付属するマニュアル『プログラミングマニュアル1・基本仕様ガイド (hspprog.htm)』には、ちゃんと エラー番号の一覧が掲載されてます(HSP 3.2以降はリファレンスの目次に)。詳しくはHSPエラー38のページを チェックあれ。

☆ パフォーマンスの良いスマートな起動を実現する

HSPでコンパイルした実行ファイル(EXEファイル)をクリックして起動すると、すぐにHSPのウィンドウ画面が出現 します。ウィンドウがリサイズ(表示サイズ変更)されたり、オブジェクトが設置されたり、描画処理が行われたり・・・、 stop命令が呼ばれる段階になるまでに、そのような1つ1つのシーンが(一瞬の出来事ですが)ユーザーに丸見えの状態と なります。

そこで、実行ファイル自動作成の#packopt命令(hideパラメータ)とscreen命令 (非表示ウィンドウのタイプ2)を利用すると、無駄なパフォーマンスを食わせずにスマートな起動を実現できます。 ユーザーにウィンドウ画面を見せてもいい段階になったら、gsel命令で必ずウィンドウを表示化させてください。 そうしないと、裏で起動したままの状態になってWindowsのタスクマネージャーからでしか終了できなってしまいます。

たとえば、下のスクリプトコードは、どちらが速くstop命令の段階へたどり着くかと言うと、Bの方なんですな。 それぞれ実行ファイル自動作成をしたものを起動して確認してみてください。

//	Aのコード

#packopt name "test_A"
#packopt hide 0

	screen 0, , , 0

	repeat 100
		color rnd(255), rnd(255), rnd(255)
		boxf rnd(300), rnd(300), rnd(500), rnd(500)
	loop

	width 500, 500, 0, 0

	stop
//	Bのコード

#packopt name "test_B"
#packopt hide 1

	screen 0, , , 2

	repeat 100
		color rnd(255), rnd(255), rnd(255)
		boxf rnd(300), rnd(300), rnd(500), rnd(500)
	loop

	width 500, 500, 0, 0

;	ユーザーに見せてもいい段階になったらウィンドウの表示化
	gsel 0, 1

	stop

Aは実行ファイルを起動した直後に、boxf命令のループ処理と、width命令による表示サイズの変更と表示位置の 移動を行っていくシーンが一瞬見えます。一方で、Bはそれらの処理はすでに終わった段階(非表示の時点で行われた) のものをユーザーが見ることになります。
 これは、ウィンドウ画面のちらつき現象をなくすredraw命令による描画の停止と再開と同じ仕組みです。実際の 体感スピードとともに、見た目の印象にも違いがありませんか? (^^)b

キーワード de HSP

HSPミニ講座

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