Skip to content

ファイルの埋め込み

Reputeless edited this page Aug 30, 2016 · 1 revision

画像や音声、テキストファイルを .exe ファイルに埋め込み、プログラムでロードする方法を解説します。

.exe ファイルにファイルを埋め込む

プロジェクトのフォルダにある Resource.rc をメモ帳などのテキストエディタで開きます。
デフォルトでは以下のように記述されています。

// Siv3D Engine Rsource
64000	FILE	"Engine/LogMessages.txt"
64080	FILE	"Engine/Assets/engine_textures.s3a"
64600	FILE	"Engine/Fonts/umeplus-p-gothic.zip"
64604	FILE	"Engine/Fonts/mplus-1p-medium.zip"
64700	FILE	"Engine/Shaders/D3D11/Sprite.vs"
64701	FILE	"Engine/Shaders/D3D11/FullScreenTriangle.vs"
64702	FILE	"Engine/Shaders/D3D11/DeferredMesh.vs"
64703	FILE	"Engine/Shaders/D3D11/LightAccumulation.vs"
64704	FILE	"Engine/Shaders/D3D11/ForwardMesh.vs"
64705	FILE	"Engine/Shaders/D3D11/ForwardParticle.vs"
64706	FILE	"Engine/Shaders/D3D11/ForwardLine3D.vs"
64800	FILE	"Engine/Shaders/D3D11/Shape.ps"
64801	FILE	"Engine/Shaders/D3D11/Shape_Stencil.ps"
64802	FILE	"Engine/Shaders/D3D11/Sprite.ps"
64803	FILE	"Engine/Shaders/D3D11/Sprite_Stencil.ps"
64804	FILE	"Engine/Shaders/D3D11/Sprite_Font.ps"
64805	FILE	"Engine/Shaders/D3D11/FullScreenTriangle1xMSAA.ps"
64806	FILE	"Engine/Shaders/D3D11/FullScreenTriangle2xMSAA.ps"
64807	FILE	"Engine/Shaders/D3D11/FullScreenTriangle4xMSAA.ps"
64808	FILE	"Engine/Shaders/D3D11/FullScreenTriangle1xMSAA_Linear.ps"
64809	FILE	"Engine/Shaders/D3D11/FullScreenTriangle2xMSAA_Linear.ps"
64810	FILE	"Engine/Shaders/D3D11/FullScreenTriangle4xMSAA_Linear.ps"
64811	FILE	"Engine/Shaders/D3D11/DeferredMesh.ps"
64812	FILE	"Engine/Shaders/D3D11/DeferredMesh_Textured.ps"
64813	FILE	"Engine/Shaders/D3D11/LightAccumulation_NoFog.ps"
64814	FILE	"Engine/Shaders/D3D11/LightAccumulation_LinearFog.ps"
64815	FILE	"Engine/Shaders/D3D11/LightAccumulation_ExponentialFog.ps"
64816	FILE	"Engine/Shaders/D3D11/LightAccumulation_SquaredExponentialFog.ps"
64817	FILE	"Engine/Shaders/D3D11/LightAccumulation_HeightFog.ps"
64818	FILE	"Engine/Shaders/D3D11/DeferredFinalize.ps"
64819	FILE	"Engine/Shaders/D3D11/ForwardMesh.ps"
64820	FILE	"Engine/Shaders/D3D11/ForwardMesh_Textured.ps"
64821	FILE	"Engine/Shaders/D3D11/ForwardLine3D.ps"
64822	FILE	"Engine/Shaders/D3D11/FXAA_None.ps"
64823	FILE	"Engine/Shaders/D3D11/FXAA_Q20.ps"
64824	FILE	"Engine/Shaders/D3D11/FXAA_Q25.ps"
64825	FILE	"Engine/Shaders/D3D11/FXAA_Q39.ps"

// Optional
64040	FILE	"Engine/Objdetect/facePhoto.zip"
64041	FILE	"Engine/Objdetect/faceAnime.zip"
64601	FILE	"Engine/Fonts/mplus-1p-thin.zip"
64602	FILE	"Engine/Fonts/mplus-1p-light.zip"
64603	FILE	"Engine/Fonts/mplus-1p-regular.zip"
64605	FILE	"Engine/Fonts/mplus-1p-bold.zip"
64606	FILE	"Engine/Fonts/mplus-1p-heavy.zip"
64607	FILE	"Engine/Fonts/mplus-1p-black.zip"

// App Resource
100		ICON	"Icon.ico"
101		FILE	"Engine/Splash.png"

// で始まる行はコメントです。
それ以外の行は リソース番号 リソース区分 埋め込むファイルへのパス の 3 項目で構成される 埋め込みリソース情報 が記述されています。新しくファイルを埋め込むには、埋め込みたいファイルについての記述を リソース番号(1000~63999) FILE "パス" という形式でファイルの末尾に追加します。

1000    FILE    "Example/Windmill.png"
1001    FILE    "Example/風の丘.mp3"
// 数字は順番通りでなくてもよい
1100    FILE    "Example/test.txt"

変更を保存し、プロジェクトをビルドすると、該当ファイルが .exe に埋め込まれます。

埋め込まれたファイルをプログラムで使う

.exe に埋め込まれたファイルのパスは /リソース番号 になります。

# include <Siv3D.hpp>

void Main()
{
	const Texture texture(L"/1000");

	const Sound sound(L"/1001");

	const String text = TextReader(L"/1100").readAll();

	sound.play();

	Println(text);

	while (System::Update())
	{
		texture.draw();
	}
}

埋め込みファイルが存在するかチェックする

FileSystem の関数に /リソース番号 のパスを指定した際の挙動です(上記の例のように /1000 が存在すると仮定します)

# include <Siv3D.hpp>

void Main()
{
	Println(FileSystem::Exists(L"/1000"));	// true
	Println(FileSystem::Exists(L"/2000"));	// false
	Println(FileSystem::Exists(L"Example/Windmill.png"));	// true

	Println(FileSystem::IsResource(L"/1000"));	// true
	Println(FileSystem::IsResource(L"/2000"));	// false
	Println(FileSystem::IsResource(L"Example/Windmill.png"));	// false

	Println(FileSystem::IsFile(L"/1000"));	// true
	Println(FileSystem::IsFile(L"/2000"));	// false
	Println(FileSystem::IsFile(L"Example/Windmill.png"));	// true

	WaitKey();
}

Siv3D について

  1. Siv3D の基本
  2. 図形を描く
  3. テクスチャを描く
  4. テキストを描く
  5. 文字列と数値の変換
  6. キーボード入力
  7. マウス入力
  8. サウンドの再生
  9. MIDI の再生
  10. ウィンドウと背景
  11. 図形のあたり判定
  12. 乱数
  13. ダイアログ
  14. ドラッグ & ドロップ
  15. アプリの状態
  16. テキストファイル
  17. INI, CSV, JSON
  18. バイナリファイル
  19. GUI
  20. アセット管理
  21. 画像編集
  22. Web カメラ
  23. マイク入力
  24. 経過時間の測定
  25. HSV カラー
  26. ファイルダウンロード
  27. 3D 描画
  28. 2D のレンダーステート
  29. 3D のレンダーステート
  30. パーティクル
  31. スクリーンショット
  32. アプリケーションの公開
  33. さらに学ぶには

表現テクニック集

入出力デバイス

開発のヒント

Clone this wiki locally