素材を一つの実行ファイルの中にまとめるのって

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Himuro

素材を一つの実行ファイルの中にまとめるのって

#1

投稿記事 by Himuro » 10年前

どうやるんでしょうか。C言語でvisual C++ expressでゲームを作っているのですが、音声ファイルとテキストファイルが大量にあるので、開発中はプロジェクトフォルダ直下にそれらファイルを置いてるのですが、配布する際に見せないように実行ファイルと合体させて置きたいのですがそういう事はできますか。イメージとしては、ユーザーの元に行くのはexeファイルと説明書くらいで、exeファイルを実行するだけでゲームが遊べて、その中で音やテキストファイルがプログラム通り正しく機能するという感じです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 素材を一つの実行ファイルの中にまとめるのって

#2

投稿記事 by softya(ソフト屋) » 10年前

DXライブラリなら ツールが付属していますが、DirectXなど自分で作っているならアーカイブファイルをご自分で作ってもらうしかないです。
exeにリソースとして埋め込むことも出来ますが、無駄にexeファイルが肥大するのでオススメできません。当然実行時のメモリも増加します。

【補足】
ちなみにリソースに埋め込んだデータはツールで簡単に取り出せますので隠したことにはなりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Himuro

Re: 素材を一つの実行ファイルの中にまとめるのって

#3

投稿記事 by Himuro » 10年前

LZH形式で圧縮したアーカイブファイルを作ってみたんですが、これをそのままプロジェクト直下に置いても読み込まれませんでした。全然よく分かってないのですが、アーカイブファイルを実行時に読み込むにはどうしたらいいのでしょうか。圧縮(LZH)フォルダーって書いてあるので、これそもそもファイルじゃなくてフォルダなんですかね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 素材を一つの実行ファイルの中にまとめるのって

#4

投稿記事 by softya(ソフト屋) » 10年前

DXライブラリを利用していないなら、ご自分でアーカイブファイルの読み込みと解凍を実装しなくてはいけません。
誰かが作った公開・配布されているアーカイブ・ライブラリを利用するのも良いと思います。
ただ、ライブラリのライセンスがGPLだとご自身のソースコードの公開義務など制限が生じますのでご注意ください。

【補足】
「Common Archivers Library: UNLHA32.DLL」
http://www.csdinc.co.jp/archiver/lib/unlha32.html

LZH系のライブラリです。

【補足の補足】
ファイルから読み込んでいた処理を全部アーカイブ処理に置き換えるので、コードの組み方次第では大変な手間になります。
それとサンプルコードが殆ど無いと思いますので、こういう事に詳しくないと大変苦労すると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Himuro

Re: 素材を一つの実行ファイルの中にまとめるのって

#5

投稿記事 by Himuro » 10年前

なるほど、大変勉強になりました。もうちょっとじっくり勉強してみようかと思います。有難うございました。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 素材を一つの実行ファイルの中にまとめるのって

#6

投稿記事 by ISLe » 10年前

一個のファイルにまとめるだけなら、コマンドプロンプトで
copy /b a.bin+b.bin+c.bin archived.bin
とかすれば結合できます。

ファイルの先頭からの開始位置はズレるのでfseek関数等を使って読み取り開始位置を移動させてから読み込みます。

結合してしまえば、既にファイル名を必要としません。
各データに対するファイル先頭からのオフセット値を結合ファイルの先頭に付加しておけば連番でアクセスできます。

圧縮したいときは結合する前に個々のファイルを圧縮します。
zlibを使えばふつうにファイルから読み込むのと同じように使えます。
ライセンスもとても緩いです。
検索すれば解説サイトがたくさん見付かります。

オフトピック
実行ファイルにリソースを付加しても最初に読み込まれるのは実行に必要なコードだけなのでは。

閉鎖

“C言語何でも質問掲示板” へ戻る