HSP3プログラミング入門講座
powered by Let's HSP!
PACKFILE編集の解説
フリーのWindowsプログラミングツール「HSP」(公式サイト「HSPTV!」)には、実行ファイル内に任意のファイルを埋め込むことができる「PACKFILE」(パックファイル)機能が用意されてます。
実際のところ、HSP3(HSP 3.x)については、プリプロセッサ命令「#pack」or「#epack」を利用した「実行ファイル自動作成」によるファイル埋め込みの方がとても楽なので推奨されてますが、ここではHSP2(HSP 2.x)時代から用意されてる旧式の「PACKFILE編集」の方の注意点などを挙げときますです。
無駄なファイルを実行ファイルにパックしてませんか?
まず、ここで必ず指定しなければならないのが「start.ax」ファイルです。
これはソースコード(*.hsp/*.as)をHSPだけが理解できる中間コードのデータに変換したファイルで、HSPスクリプトエディタの[HSP]→[START.AXファイル作成]で出力できます。
さて・・・、まさかこれ以外のファイルを指定しちゃってる人がいないでしょうかね。「start.ax」ファイル以外で基本的に許されるのは、こちらのPACKFILE機能のページでも説明してる直利用が可能な「画像ファイル」、「音楽ファイル」(WAVEファイルのみ)、「テキストファイル」だけです。
たとえば、HSPのソースコードファイルやモジュールファイル(拡張子が*.hsp/*.asのもの)、その他に「hsprt」、「hsptmp」、「obj」、「packfile」、「hsp3.exe」というようなHSP本体に存在するファイルを指定しちゃってる人・・・、確実にいますよね。(^^;
HSPの付属リファレンス『プログラミングマニュアル1・基本仕様ガイド
(hspprog.htm)』の「1.プログラミングガイド」→「実行ファイルの作成方法」と「PACKFILEの編集について」の項目をよ〜く読んでください。これらのファイルを含めて!、なんてなことはいっさい書かれてないはずです。
メリットがいっさいなく、実行ファイルがムダにでかくなる以外の何者でもないので、リストから外しましょー。(^o^
ちなみに、HSP拡張プラグイン(DLLファイル/HPIファイル)を実行ファイルに埋め込みたいと思ってる人がいるかもしれませんがムリです。配布する際は必ず実行ファイルと同封します。
パックする意味が皆無なファイル | |
*.hsp、*.as | HSPのスクリプトファイル、HSP拡張プラグインのヘッダーファイル、モジュールファイルなど単なるテキストデータ |
hsptmp | HSPのスクリプトファイルの単なるバックアップ |
obj | コンパイルの一時データ |
packfile | 実行ファイル作成に必要な情報が書かれたテキストデータ |
*.dll、*.hpi | HSP拡張プラグイン |
*.mp3、*.avi、*.wmv、 *.mpg、*.wma、*.mid |
mmload命令やmci命令はPACKFILE内のメディアファイルの直利用不可 (例外はmmload命令+WAVEファイル) |
PACKFILE編集した後
HSPスクリプトエディタのPACKFILE編集で「start.ax」ファイルなどを指定したら、[ツール]→[EXEファイル作成]に進んで、出力する実行ファイル名や起動時のウィンドウサイズを指定、実行ファイルを出力します。
[起動時にメインウィンドゥを非表示にする]というオプションを有効にした場合は、スクリプト内でgsel命令を使ってウィンドウを表示する必要があります。具体的には第2パラメータでタイプ1かタイプ2を指定しないとウィンドウが現れません。
裏ではプログラムが起動してるので、「Ctrl+Alt+Del」キーのタスクマネージャからでないとプログラムを終了させられなくなるので注意!
PACKFILE機能の暗号化
PACKFILE編集のダイアログには、[暗号化]というチェックボックスがあります。これを有効にしてファイルを指定すると、暗号化対象となったファイルはリストに「+」(プラス)マーク付きファイル名で表示されます。
これはパックするファイルを暗号化してHSP製実行ファイル(EXEファイル)に埋め込む機能ですが、具体的にどのような違いがあるのかというと、たとえば下のスクリプトをコンパイルして、「start.ax」ファイルを暗号化した実行ファイルと、暗号化してない実行ファイルをそれぞれ用意してみてください。
mes "HSPさん、こんにちは〜"
そして、この実行ファイルをたとえばWindowsのメモ帳でわざと開いてみましょう。
ぐちゃぐちゃと文字化けのようなデータが表示されますが、「start.ax」ファイルを暗号化してない実行ファイルの方は、最後あたりに「HSPさん、こんにちは〜」という文字列を発見できるかと思います。一方、暗号化した実行ファイルの方はこの文字列がいっさい出現しません。
たとえば、ゲームなどで話を進めていかないと現れない文章があったとすると、「start.ax」ファイルを暗号化してない実行ファイルはストーリーの文字列が丸バレになります。まあ、いきなりメモ帳(テキストエディタ)で実行ファイルを開いてしまう人はあまりいないとは思いますが・・・。
ちなみに、新式の実行ファイル自動作成機能を利用した場合は、start.axはデフォルトで暗号化パックされるようになってます。start.ax以外の個々のファイルは、プリプロセッサ命令「#epack」を利用します。