HSPのPACKFILE機能とは?

Windowsプログラミング「HSP」(公式サイト「HSPTV!」)には、HSP製実行ファイルにファイルを埋め込む機能が用意されてます。「PACKFILE」(パックファイル)という機能です。

HSP3(HSP 3.x)では、PACKFILE機能を利用して埋め込みたいファイルを指定する方法が2つ用意されてます。
 上はHSP3で推奨されている方法で、下はHSP2時代からある旧式の方法です。

  1. ソースコード内でプリプロセッサ命令「#pack」or「#epack」を利用してファイルを指定。
    (→ 詳しくは実行ファイル作成のページ)
  2. HSPスクリプトエディタで[ツール]→[PACKFILE編集]からファイルを指定。
    (→ 詳しくはPACKFILE編集のページ)

★ HSPの実行ファイル作成の流れ

HSP(HSP3)で実行ファイル作成までの流れは下のような感じです。

- PACKFILE機能のファイル指定
暗号化指定
出力ファイル名・
ウィンドウサイズの指定
実行ファイルの出力

プリプロセッサ命令「#pack」or「#epack」
(※start.axファイルは自動的にパックされるので
指定せず)
プリプロセッサ命令
「#packopt」を利用
エディタの[HSP]→[実行ファイル
自動作成]

エディタの[ツール]→[PACKFILE編集]
(※start.axファイルを必ず指定する)
エディタの[ツール]→[EXEファイルの作成]

PACKFILE機能の注意点

さてさて、HSPがサポートするこの機能にはいろいろと制限があることをご存知ですか?

1.ありとあらゆる"ファイル"を実行ファイル内に埋め込むことができる、が・・・

たとえば、実行ファイル、拡張プラグイン(DLLファイル)、画像ファイル、音楽ファイル、動画ファイル、テキストファイル、な〜どなど何でもかんでもぜーんぶOK。ただ注意点として、

「ファイルを埋め込むことができる」「ファイルを利用できる」

であるということです。これホントーに重要。
 何でもかんでも埋め込んだファイルを利用できると勘違いする人がいるんです。(^ー^;

HSPのPACKFILE機能で外部ファイルをパック
実行ファイル × 実行ファイルの中に実行ファイルを埋め込むことはできます。で、その埋め込まれた実行ファイルを起動 するには、一度ハードディスク上にファイルとして出力して、これをexec命令で起動させないとダメ!
拡張プラグイン × 実行ファイルの中に埋め込むことはできます。だからといって、実行ファイル単体で拡張プラグインの命令 を利用するのは100%ムリです。拡張プラグインは実行ファイルと同じフォルダに存在していないとダメです。 つまり、自分のホームページなどで配布する際は、実行ファイルとDLLファイル/ HPIファイルを同封して公開します。
・これをミスってるときの定番エラー「HSP Error 38
画像ファイル ○ 実行ファイルの中に埋め込むことはできます。そして、HSPの標準命令であるpicload命令 であれば直で利用できます。対応フォーマットはBMPファイル、GIFファイル、JPEGファイルです。
PNGファイルは、picload命令がそもそも対応してません。
・「mod_img.as」モジュールのimgload命令はすべての画像形式でPACKFILE内は扱えません。
・ PACKFILE内を読み込める画像ファイル関連のHSP拡張プラグインもあります。
音楽ファイル △ HSPの標準命令であるmmload命令であれば直で利用できます。ただ、この対応 フォーマットはWAVEファイルだけです。それ以外の、MIDIファイル、MP3ファイル、WMAファイルなどはハード ディスク上にファイルとして存在していないとダメです。mci命令は全形式が ハードディスク上にファイルとして存在していないとダメです。
・ PACKFILE内を読み込める音楽ファイル関連の汎用ライブラリもあります。
動画ファイル × 実行ファイルの中に埋め込むことはできます。ただ、HSPの標準命令であるmmload命令やmci命令での直利用は 一切できません。AVIファイル、WMVファイルなどはすべてハードディスク上にファイルとして存在していないとダメ。
テキストファイル ○ 実行ファイルの中に埋め込むことができ、HSPの標準命令であるnoteload命令やbload命令であれば直で読み込む ことが可能です。

2.PACKFILE(パックファイル)の中身を後から変更できない。

PACKFILE内に存在するファイル名を指定したbsave命令やnotesave命令を呼んでも、PACKFILEの中身は一切書き換わり ません。新しいファイルがハードディスク上に出力されるか、すでに存在してるなら上書きされるだけです。ファイルを 削除するDelete命令も機能しないです。

PACKFILEのデータというは実行ファイルの中に存在してるわけで、実行ファイルを起動中にその内部をホイホイ いじれたとしたら、そもそもシステム的に問題アリ・・・。起動中の実行ファイルを削除しようとしても、Windowsが警告を 出して削除できないのと同じです。

プログラムのデータを残したい場合は、ファイルとしてハードディスク上に出力しましょう。ゲームなんかで出力した データの簡単にチェックできないように、あるいは改変できないようにしたい場合は「暗号化」でGoogle検索Yahoo!検索すーるする!

3.PACKFILE(パックファイル)機能で埋め込めるファイル名は「8.3形式」。

PACKFILE機能で埋め込めるファイル名には「8.3形式」の制限があり注意が必要です。かなり簡単に言えば、日本語はダメ、長いファイル名はダメということです。
 また、HSPのPACKFILE機能に「フォルダ」(ディレクトリ)の概念はありません。

キーワード de HSP

HSPミニ講座

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