ボンジュール・マドモアゼル

本サイトの情報は自己責任にてご利用下さい。

[VC] Visual Studio が include したリソースファイルをマージすることの検証

 
Visual C++ が読み込む .RC ファイルの中で、コンパイル時ディレクティブを使用せずに #include ディレクティブによってほかの .RC ファイルをインクルードしているときは注意してください。従来のようにテキスト エディタを使用して編集した .RC ファイルを Visual C++ に取り込む場合はこの点が問題となります。Visual C++ はインクルードされている .RC ファイルを読み込み、その中に定義されているリソースをインクルード元の .RC ファイルのリソースにマージします。インクルード元の .RC ファイルを保存すると、ファイルの中の #include ステートメントがインクルードされるリソースに置き換えられます。

MFC ライブラリ リファレンス
テクニカル ノート 35: Visual C++ における複数のリソース ファイルとヘッダー ファイルの使用




要は、リソースファイル内に、単に #include で取り込んだ外部ファイルは、リソースエディタでは、展開されてマージされてしまいますよ、ということ。そこで、Visual Studio 6.0 で実際に検証してみた。

1. 外部ファイルと、それをインクルードしたリソースファイルを用意する


外部ファイル subres.rc2
STRINGTABLE DISCARDABLE

BEGIN
IDS_MYSAMP1 "My Sample String1"
IDS_MYSAMP2 "My Sample String2"
END


リソースファイル(インクルード元)ResTest.rc
...

STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "ResTest"
IDS_HELLO "Hello World!"
IDC_RESTEST "RESTEST"
END

#endif // 日本語 resources
/////////////////////////////////////////////////////////////////////////////

#include "subres.rc2"
...


ストリングテーブルをリソースエディタで確認する。
ストリングテーブル確認


2. リソースエディタにてリソースを編集する

あえて、ストリングテーブルとは関係ないダイアログを編集し保存する.
編集前ダイアログ編集前


編集後ダイアログ編集後


3. 保存後、リソースファイルを確認する

リソースファイル(インクルード元)ResTest.rc
...

STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "ResTest"
IDS_HELLO "Hello World!"
IDC_RESTEST "RESTEST"
IDS_MYSAMP1 "My Sample String1"
IDS_MYSAMP2 "My Sample String2"
END
...
お、ほんとだ。外部ファイルの内容がマージされている。
<<warning C4312: '型キャスト' : 'LONG' からより大きいサイズの 'HMODULE' へ変換します。 | ホーム | リソースファイル Visual C++独自仕様について>>

コメント

コメントの投稿

管理者にだけ表示を許可する

画像の文字を半角数字で下記ボックスに記入ください。
文字が読みにくい場合はブラウザの更新をすると新しい文字列が表示されます。