素材を一つの実行ファイルの中にまとめるのって
素材を一つの実行ファイルの中にまとめるのって
どうやるんでしょうか。C言語でvisual C++ expressでゲームを作っているのですが、音声ファイルとテキストファイルが大量にあるので、開発中はプロジェクトフォルダ直下にそれらファイルを置いてるのですが、配布する際に見せないように実行ファイルと合体させて置きたいのですがそういう事はできますか。イメージとしては、ユーザーの元に行くのはexeファイルと説明書くらいで、exeファイルを実行するだけでゲームが遊べて、その中で音やテキストファイルがプログラム通り正しく機能するという感じです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 素材を一つの実行ファイルの中にまとめるのって
DXライブラリなら ツールが付属していますが、DirectXなど自分で作っているならアーカイブファイルをご自分で作ってもらうしかないです。
exeにリソースとして埋め込むことも出来ますが、無駄にexeファイルが肥大するのでオススメできません。当然実行時のメモリも増加します。
【補足】
ちなみにリソースに埋め込んだデータはツールで簡単に取り出せますので隠したことにはなりません。
exeにリソースとして埋め込むことも出来ますが、無駄にexeファイルが肥大するのでオススメできません。当然実行時のメモリも増加します。
【補足】
ちなみにリソースに埋め込んだデータはツールで簡単に取り出せますので隠したことにはなりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 素材を一つの実行ファイルの中にまとめるのって
LZH形式で圧縮したアーカイブファイルを作ってみたんですが、これをそのままプロジェクト直下に置いても読み込まれませんでした。全然よく分かってないのですが、アーカイブファイルを実行時に読み込むにはどうしたらいいのでしょうか。圧縮(LZH)フォルダーって書いてあるので、これそもそもファイルじゃなくてフォルダなんですかね。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 素材を一つの実行ファイルの中にまとめるのって
DXライブラリを利用していないなら、ご自分でアーカイブファイルの読み込みと解凍を実装しなくてはいけません。
誰かが作った公開・配布されているアーカイブ・ライブラリを利用するのも良いと思います。
ただ、ライブラリのライセンスがGPLだとご自身のソースコードの公開義務など制限が生じますのでご注意ください。
【補足】
「Common Archivers Library: UNLHA32.DLL」
http://www.csdinc.co.jp/archiver/lib/unlha32.html
LZH系のライブラリです。
【補足の補足】
ファイルから読み込んでいた処理を全部アーカイブ処理に置き換えるので、コードの組み方次第では大変な手間になります。
それとサンプルコードが殆ど無いと思いますので、こういう事に詳しくないと大変苦労すると思います。
誰かが作った公開・配布されているアーカイブ・ライブラリを利用するのも良いと思います。
ただ、ライブラリのライセンスがGPLだとご自身のソースコードの公開義務など制限が生じますのでご注意ください。
【補足】
「Common Archivers Library: UNLHA32.DLL」
http://www.csdinc.co.jp/archiver/lib/unlha32.html
LZH系のライブラリです。
【補足の補足】
ファイルから読み込んでいた処理を全部アーカイブ処理に置き換えるので、コードの組み方次第では大変な手間になります。
それとサンプルコードが殆ど無いと思いますので、こういう事に詳しくないと大変苦労すると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 素材を一つの実行ファイルの中にまとめるのって
一個のファイルにまとめるだけなら、コマンドプロンプトで
copy /b a.bin+b.bin+c.bin archived.bin
とかすれば結合できます。
ファイルの先頭からの開始位置はズレるのでfseek関数等を使って読み取り開始位置を移動させてから読み込みます。
結合してしまえば、既にファイル名を必要としません。
各データに対するファイル先頭からのオフセット値を結合ファイルの先頭に付加しておけば連番でアクセスできます。
圧縮したいときは結合する前に個々のファイルを圧縮します。
zlibを使えばふつうにファイルから読み込むのと同じように使えます。
ライセンスもとても緩いです。
検索すれば解説サイトがたくさん見付かります。
copy /b a.bin+b.bin+c.bin archived.bin
とかすれば結合できます。
ファイルの先頭からの開始位置はズレるのでfseek関数等を使って読み取り開始位置を移動させてから読み込みます。
結合してしまえば、既にファイル名を必要としません。
各データに対するファイル先頭からのオフセット値を結合ファイルの先頭に付加しておけば連番でアクセスできます。
圧縮したいときは結合する前に個々のファイルを圧縮します。
zlibを使えばふつうにファイルから読み込むのと同じように使えます。
ライセンスもとても緩いです。
検索すれば解説サイトがたくさん見付かります。
オフトピック
実行ファイルにリソースを付加しても最初に読み込まれるのは実行に必要なコードだけなのでは。