MFC   VC++   Visual Studio   Visual Studio   プログラミング

2008 sp1での実行ファイルサイズ

 Visual Studio 2008 sp1でMFCを使い、「スタティックライブラリでMFCを使う」にした場合、プロジェクトを作って何もしないまま実行ファイルを作るとファイルサイズが大きくなる。
 特にドキュメントを使用し、リボンコントロールを使用したり、視覚スタイルの切り替えを有効にすると、それだけで約3Mにもなる。

 ここで、何がそんなに容量を増やしているか調べてみたところ、Office 2008用のリソースにデザイン用のPNG画像が大量にあることがわかりました。
 具体的には、PNG画像は485個で745,894バイトもありました。
 一つ一つはそれ程大きくないのですが、数が多いためこのサイズになっています。

 そこで、ちょっとでもサイズを小さくしたい場合、視覚テーマをOffice 2008以外のものにし、切り替えを無効にするか、Office 2008タイプは使用しないようにします。
 当然、リボンコントロールは使用しないようにします。
 ちなみに、「Visual Studio 2005」や「Office 2003」「Office XP」などではPNGは使われておらず、ビットマップだけで、それ程サイズも大きくないのでここでは無視します。

 しかし、この方法でも内部で勝手にリソースを入れるようにコンパイルされるので、そのままでは結局同じファイルサイズになってしまいます。
 そこで、ちょっとイレギュラーなやり方かもしれませんが、リソースファイルを編集してしまいます。

 視覚テーマが定義されているファイルは「afxribbon.rc」で、「〜\Microsoft Visual Studio 9.0\VC\atlmfc\include\l.jpn」にあります。
 このファイルの先頭付近に、
#ifndef _AFX_INTL_RESOURCES
#include "res\RibbonStyle2007Aqua.rc2"
#include "res\RibbonStyle2007Black.rc2"
#include "res\RibbonStyle2007Blue.rc2"
#include "res\RibbonStyle2007Silver.rc2"
#endif
 というのがあり、ここでPNGなどのテーマ用リソースを取り込むように定義されている「rc2」ファイルをインクルードするようになっています。
 そこで、以下のように、独自の定義値「_MYDEF_NO_2007STYLE」が定義されていたらインクルードしないようにします。
#ifndef _AFX_INTL_RESOURCES
#ifndef _MYDEF_NO_2007STYLE
#include "res\RibbonStyle2007Aqua.rc2"
#include "res\RibbonStyle2007Black.rc2"
#include "res\RibbonStyle2007Blue.rc2"
#include "res\RibbonStyle2007Silver.rc2"
#endif
#endif
 後は、「XXX.rc2」内、
// 手動で編集されたりソースをここに追加します...
以下に
#define _MYDEF_NO_2007STYLE
 としておけば、これらのスタイルは取り込まれなくなり、ファイルサイズが約800kb小さくなります。
 この他に、「XXX.rc」内で定義しても良いです。要するに「afxribbon.rc」をインクルードする前に宣言できればいいです。

 ここで、「afxribbon.rc」をインクルードしなければいいのでは?と思うかもしれませんが、この中にはツールバーのカスタマイズ用のリソースなどもあり、場合によっては必要になることもあるため、ここではOffice 2008のものだけ除外するようにしてあります。
ランキングへ     posted by 遠雷 | Comment(0) | MFC
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。