人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: peugeot
●カテゴリ:コンピュータ
✍キーワード:C++ KB RC とある アプリケーション
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● cx20
●50ポイント

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


http://www.codeguru.com/Cpp/COM-Tech/activex/tutorials/article.p...

CodeGuru: ActiveX Control Tutorial

URL は参考情報です。

◎質問者からの返答

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

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

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


2 ● cx20
●50ポイント

http://mtakahashi.com/old/11650.html

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バイトになる

参考情報です。

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ