Visucal C++6.0において数ヶ月の開発の間にリソースファイル(アプリケーション名.rc)がものすごく大きくなっていました。

数十kB→80MBover おかげでコンパイル後の実行ファイルも20MBを超えています。
画面の数は2,3個増えただけです(画像等も使用していません)
テキストエディタで直接開くと(Dialog Info)ブロックのとあるダイアログの宣言が90%以上を占めていました(0x0000,の並びばかり)。ただこのダイアログは他のダイアログとほぼ同じ機能です。
こんな経験をされたかたいますか?またその時の対応策を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/04/14 17:26:16
  • 終了:--

回答(2件)

id:cx20 No.1

cx20回答回数607ベストアンサー獲得回数1082005/04/14 18:04:16

ポイント50pt

http://www.nitoyon.com/vc/tips/ie_component.htm

IEコンポーネントの使い方 [VC++の使い方]

恐らく、使ってない「Active X コントロール」が張り付いているのでは?

と思われます。


試しに「Microsoft Web Browser」というコントロールを貼り付けて、

リソースファイル(*.rc)を作ってみました。


IDD_DIALOG1 … ダイアログのリソースID

IDC_EXPLORER1 … ブラウザコントロール(Microsoft Web Browser)のリソースID


「Dialog Info」にある「IDC_EXPLORER1」を見てみると、

たくさんの「0x0000」が並んでいることが分かります。


もし、このコントロールが必要ないのであれば、消してしまってかまわないと思います。

何のコントロールか分からない場合は、レジストリで

HKEY_CLASS_ROOT¥CLSID¥{8856F961-340A-11D0-A96B-00C04FD705A2}

のように CLSID で、検索してみて、

InProcServer32 にある DLL や OCX のパス情報を確認してみてください。

(例えば、ブラウザコントロールの場合:C:¥WINDOWS¥System32¥shdocvw.dll になります。)


<resource_test.rc>

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//


IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 317, 315

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION ”ダイアログ”

FONT 9, ”MS Pゴシック”

BEGIN

DEFPUSHBUTTON ”OK”,IDOK,260,7,50,14

PUSHBUTTON ”キャンセル”,IDCANCEL,260,24,50,14

CONTROL ””,IDC_EXPLORER1,”{8856F961-340A-11D0-A96B-00C04FD705A2}”,

WS_TABSTOP,11,13,57,38

END


/////////////////////////////////////////////////////////////////////////////

//

// Dialog Info

//


IDD_DIALOG1 DLGINIT

BEGIN

IDC_EXPLORER1, 0x376, 160, 0

0x0000, 0x0000, 0x004c, 0x0000, 0x0a56, 0x0000, 0x05e4, 0x0000, 0x0000,

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,

0x0000, 0x0000, 0x004c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,

0x0000, 0xd0e0, 0x0057, 0x3573, 0x11cf, 0x69ae, 0x0008, 0x2e2b, 0x6212,

0x0008, 0x0000, 0x0000, 0x0000, 0x004c, 0x0000, 0x1401, 0x0002, 0x0000,

0x0000, 0x00c0, 0x0000, 0x0000, 0x4600, 0x0080, 0x0000, 0x0000, 0x0000,

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000,

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,

0

END


URL は参考情報です。

id:peugeot

ふむ確かに、問題のダイアログではMSFlexGridコントロールを使用しています。(使ってはいるのですが異常にサイズが大きいですね)

こいつが犯人というのはわかるのですが、他のダイアログでも同じMSFlexGridを使用しています。

コピペでダイアログを作成するのがまずかったのでしょうか。

2005/04/14 18:14:45
id:cx20 No.2

cx20回答回数607ベストアンサー獲得回数1082005/04/14 19:26:52

ポイント50pt

URL に同様の Q&A がありました。


> 実はあれから、問題のMSFlexGridのプロパティ値を

> 片っ端から、変更してみました。

> すると、ある設定値で大幅にサイズダウンしました。

>

> サイズにして、

>  [488MB] ⇒ [37KB]

>

> 変更したのは、

>  [プロパティ]-[スタイルタブ]-[グリッド線]を

>   <1-Flat> ⇒ <0-None> にしただけです。

>

> 全体として

>  [1GB] ⇒ [244MB] にまで縮小することができました。


どうやら、MSFlexGrid のプロパティの設定値が関係あるようです。

(MSFlexGrid 不具合のような気がしますが・・・)


試しに、一旦、今ある MSFlexGrid のコントロールを削除して、

再度、貼り直してプロパティを設定してみてください。


この方法でもダメなら、ダイアログのリソース上でプロパティを

設定するのではなく、プログラム側で設定するしか無いように

思います。


ちなみに、自分の PC(Visual C++ 6.0 SP5)で、MSFlexGrid を貼り付けて、

>  [プロパティ]-[スタイルタブ]-[グリッド線]

の変更してみたのですが、事象を確認することはできませんでした。


もしかしたら、SP のバージョンが関係しているのかも知れません。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200207...

リソースファイルサイズが*Mバイトになる

参考情報です。

id:peugeot

ありがとうございました。

問題のダイアログを削除して、再度構築しなおそうかと考えていましたので、MSFlexGridの変更だけならすぐすみそうです。挑戦してみます。

2005/04/14 20:06:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません