- PR -

(VC++)テキストファイルをリソースとしてexeファイルに埋め込む方法

1
投稿者投稿内容
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2005-12-26 15:30
テキストファイルをリソースとしてexeファイルに埋め込む方法を探しています。
StringTableだとちょっと不便な点があるため、出来ればファイル形式がいいです。
直接ソースに記述する方法も考えたのですが、できれば編集を容易にしたいので・・・。
方法をご存じの方は教えてください。
よろしくお願いします。

WinXP
VC++.net2002 (MFC使用)
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2005-12-26 15:52
確認していませんが

プロジェクト→既存項目の追加→テキストファイルを追加

プロパティで埋め込まれたりソースに変更

ResourceManager使って引っ張り出す。
コード:
Assembly asm = Assembly.GetEntryAssembly();
			ResourceManager rm =
				new ResourceManager(Namespace,
				asm);


Namespaceの部分は

sample.test.txt

見たいな感じで(標準ネームスペースがsample.普通にtest.txtを追加した場合)

C#ならこれでできます、C++でできなかったらすみません。
_________________
9uiet Design - http://quietdesign.rental.allinoneserver.net/
デザインにこだわったソフトの配布とプログラミングTipsの公開(予定)をしています。
9uiet Blog - http://seiga.blog44.fc2.com/
笑ったことやプログラミングのことなど書
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-26 16:57
引用:

清華さんの書き込み (2005-12-26 15:52) より:

ResourceManager使って引っ張り出す。


ResouceManager ではなく、GetManifestResourceStream メソッドを使うべきかも。

引用:

Assembly asm = Assembly.GetEntryAssembly();


GetExecutingAssembly メソッドにすべきかも。

asm という名前は、おそらく使ってはいけない名前なので変更しました。

コード:


private:
System::Void button1_Click(System::object* sender, System::EventArgs* e) {
System::Reflection::Assembly __gc * pAssembly = System::Reflection::Assembly::GetExecutingAssembly();
System::IO::Stream __gc * pStream = pAssembly->GetManifestResourceStream(S"[TODO:ここにリソースまでのパス]");
System::IO::StreamReader __gc * pReader = new System::IO::StreamReader(pStream, System::Text::Encoding::Default);
}


相変わらず、VC++.NET が入ってないので未検証です。
VC++.NET は、埋め込まれたリソースって使えるんでしょうかね?

[追記]
 pAssembly->GetManifestResourceNames メソッドで確認してみてください。
 使えないような気がします。
[/追記]

# く、MFC って書いてあった... orz

[ シグネチャを削除 ]

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-09-19 14:45 ]
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2005-12-26 17:30
引用:

ResouceManager ではなく、GetManifestResourceStream メソッドを使うべきかも。


あぁそういえば有りましたね、Icon読み出すときとか使ってるのに忘れてたorz


引用:

GetExecutingAssembly メソッドにすべきかも。
asm という名前は、おそらく使ってはいけない名前なので変更しました。


仰るとおりです、めんどくさかったんで作ってるソフトのコード引っ張ってきたんですがそれがDLLだったんでEntryになってました、訂正有難うございますm(_ _)m

ところでなぜ asm を使用してはいけないのでしょうか?( C++ の名前違反? )
_________________
9uiet Design - http://quietdesign.rental.allinoneserver.net/
デザインにこだわったソフトの配布とプログラミングTipsの公開(予定)をしています。
9uiet Blog - http://seiga.blog44.fc2.com/
笑ったことやプログラミングのことなど書
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-26 17:38
引用:

清華さんの書き込み (2005-12-26 17:30) より:

ところでなぜ asm を使用してはいけないのでしょうか?( C++ の名前違反? )


__asm というのがあった気がします。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-12-26 18:28
こんばんは。

#風邪ひいて頭がボーっとしているので、トンチンカンなこと書いてたらスイマセン。

引用:

しゅうさんの書き込み (2005-12-26 15:30) より:
テキストファイルをリソースとしてexeファイルに埋め込む方法を探しています。
StringTableだとちょっと不便な点があるため、出来ればファイル形式がいいです。
直接ソースに記述する方法も考えたのですが、できれば編集を容易にしたいので・・・。

WinXP
VC++.net2002 (MFC使用)



しゅうさんは「Win32リソース」のことを言っているものだと思ったのですが、違いますでしょうか?
私ならRT_HTMLのリソースタイプで追加します。こんな感じです。

aaaa.rcファイル
コード:
aaaa.txt	HTML	DISCARDABLE	"aaaa.txt"
aaaa.htm	HTML	DISCARDABLE	"aaaa.htm"
aaaa.css	HTML	DISCARDABLE	"aaaa.css"
aaaa.gif	HTML	DISCARDABLE	"aaaa.gif"
aaaa.jpg	HTML	DISCARDABLE	"aaaa.jpg"


Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2005-12-26 19:12
引用:

Tdnr_Symさんの書き込み (2005-12-26 18:28) より:
しゅうさんは「Win32リソース」のことを言っているものだと思ったのですが、違いますでしょうか?


MFCと言われているので間違いないと思います。
(C#とMFCでは結構違います。(MC++ならば近いですが))

FindResource LoadResource LockResource あたりの関数を使います。
ちなみに HTML のリソースタイプでなくても、任意のリソースタイプも指定できます。

例)
コード:

IDR_TEXT1 Text DISCARDABLE "test.txt"



参考)リソースにファイルを埋め込む
http://www.runan.net/program/tips/sdk_22_FindResource.shtml
参考)カスタムリソース
http://wisdom.sakura.ne.jp/system/winapi/win32/win75.html

MSDN FindResource
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_findresource.asp

[ メッセージ編集済み 編集者: Blue 編集日時 2005-12-26 19:16 ]

[ メッセージ編集済み 編集者: Blue 編集日時 2005-12-27 10:43 ]
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2005-12-27 18:12
なんとか解決できました。
アドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)