原因不明のエラーが発生します。
アプリABCの3つあります。
VC2003のMFCアプリ(ダイアログベース)です。
OSはXP(Sp3)です。
3つのアプリをいろいろな組み合わせで
2つまでは正常起動できますが
3つ目を起動するとアプリケーションエラーになります
3つ目がAでもBでもCでも同じです。
イベントビューアで見るとイベントID;1000
エラー発生モジュール mfc71d.dll
と、なっていました。
VCのデバッグで3つめのアプリを起動すると
ダイアログのCreate内でエラーになっていました。
単体では問題ないのに3つ起動するとエラーというのは
メモリやリソースとかが不足してるせいでしょうか?
タスクマネージャでハンドルを見ると120ほど
GDIオブジェクトをみると330くらいでした
全体のハンドル数を見ると15000くらい
メモリは2Gありますが800Mくらい使用しています。
リソース不足してるように見えません。
何が原因で3つめのアプリがエラーになるのかわかりません
何かエラーを解決する方法をご存じありませんか?
よろしくお願いいたします。
3つのアプリで同じクラス名とか使っていますか?
>>3つのアプリで同じクラス名とか使っていますか?
クラス名というのはMFCクラスのことでしょうか?
3つともMFCダイアログアプリで
同じようなクラスを使用しています
CDialogとかCDCとか
余計なアプリを起動せずに3つだけ起動すると
正常起動できました
ただ、その状態で他のアプリ(IEやタスクマネージャ)を
開こうとしても開けなかったりメニューの一部が消えたりします。
やはりアプリABCがリソースを大量に消費してるのだと思います。
それが何かはわかりませんがこれ以上くわしい情報が出せない以上、
ここで回答をもらうのも難しいと思いますので
ここで解決とさせていただきます。
ありがとうございました。
原因がわかったので報告します
アプリが開かなかったのは
デスクトップヒープの制限にひっかかってたからみたいです。
XPだとデフォルトで3MB(コントロール15000個)らしく
この制限値をレジストリで増加したら正常に起動できました。
レジストリをいじるのがちょっと嫌ですがしかたないですね…
> アプリが開かなかったのは
> デスクトップヒープの制限にひっかかってたからみたいです。
リソースを大量に消費しているのは必然なのですか?
もしも浪費しているのならば、そこを直すのが筋だと思いますが。
普通に考えて3つのアプリで15000個のコントロールを使いっぱなしなんてのは
ちょっと考えられないです。
本当にそれだけのリソースを同時に使う必要があるのでしょうか?
同時に使う必要が無いのであれば、ウインドウ構成とかを見直した方が
良いのではないかと思います。
デフォルトで3MBと言うのはそれが通常の使用では問題ないレベルの
制限だからだと思いますのでその制限の中で動かないのであれば、
アプリの設計に問題があると考えた方が良いと思います。
そのアプリを使っている間は他のアプリは使えなくても良いと言う
仕様なら話は別ですが、そういう仕様だとユーザーからクレームが
来そうです。