1

したがって、これは一種の奇妙なエラーです。ある顧客のマシン (Windows XP SP3) で、ShowDialog() を介してフィルター ダイアログを開こうとすると、プログラムがクラッシュします。

何が起こるか: ユーザーは期待どおりに動作し、異常なことや間違ったことは何もしておらず、すべての動作は複数のマシン (Win XP 32 ビットから Windows 7 64 ビットまでの範囲) でテストされています。

さて、しばらくして、彼/彼女はフィルター ダイアログを使用したいと思い (その時点で彼/彼女は何十回も実行しました)、アプリケーションがクラッシュします。Windows XP から「$applicationname が問題を引き起こしたため、終了する必要があります」という素晴らしいメッセージが表示されます。その下に、部分的にビルドされたフィルター ダイアログが表示されます (つまり、ウィンドウ、スクロール バー、透明な「穴」が表示されます)。テキストコントロール/ラベルはそうあるべきです。

Windows イベント ビューアでは、次のようなエントリが表示されます。

イベント ID: 1000 ソース: .NET ランタイム 4.0 エラー Re (何かがこの背後にあり、「レポート」と表示されている可能性があります?!)

障害のあるアプリケーション $applicationname.exe、バージョン $versionnumber、スタンプ $someRandomNumbers、障害のあるモジュール ntdll.dll、バージョン 5.1.2600.6055、スタンプ 4d00f27b、デバッグ?0、障害アドレス 0x00446da

さて、私が不思議に思うのは、ShowDialog を介してダイアログが開かれる位置が、2(!) 個の try...catch ブロックに埋め込まれていることです。アプリケーションがクラッシュする可能性はありますか? このクラッシュに関するログ ファイル エントリ (プログラム内のすべての catch ブロックで実行される処理であり、常に最初に実行される処理) さえありません。

私はすでにそのマシンからアプリケーションと.NET 4をアンインストールし、再起動してすべてを再度インストールし、Windows Updateをインストールして再起動しました。同じ結果です。

*編集で気付きました: Microsoft からのメッセージを閉じると、イベントビューアーに追加のエントリが作成されます:

未処理の例外が原因でプロセスが終了しました 元のメッセージが別の言語で翻訳されているため、これは英語での意味だと思います

例外コード: c015000f、アドレス 7c9546DAアドレスは常に同じです

4

1 に答える 1

0

@Hans が言ったように、これは De/ActivateActCtx winapi 関数の誤った使用が原因です。

VB アプリを作成したときに同じ問題に遭遇しました。私のActiveX Contrl(MFC)を使用しています。ダイアログ バリアントをコントロール クラス定義に配置します。以下のように:

CMyDlg dlg;

それで、初期化されたダイアログがいつ私のコントロールにないのですか?そして、それはあなたと同じ問題を引き起こしました。コントロールを表示する必要があるときに、エラーが表示されます。

于 2013-08-13T07:24:02.093 に答える