6
itsAnalysisDataTable.CreateEx( WS_EX_CLIENTEDGE, AfxRegisterWndClass( CS_DBLCLKS, LoadCursor( NULL, IDC_ARROW ), (HBRUSH)::GetStockObject( NULL_BRUSH ), NULL ), "AnalysiysTable", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, dialogItemRect, this, IDC_ANALYSIS_DATA_TABLE );

この行には 2 日間の労力がかかりましたが、解決策はありませんでした。itsAnalysisDataTable は、グランド グランド グランド ペアレントとして CWnd を持つカスタム ウィンドウ コントロールです。このコントロールは、コードで問題なく他のペースで正常に使用されています。これは CPropertyPage です。

私が抱えている問題は、MyProduct (x64).exe の 0x76f7fd5c で未処理の例外が発生する (そして毎回発生する) 行です。

例外は 32 ビットでも発生します。私は Windows 7 x64、VS 2008 を使用しています。

私がすでに試したこと:

  1. デバッガーで win32 例外のブレークを有効にします。例外は発生しません (コード内に大量に存在し、効果がない最初のチャンスの例外を除く)
  2. プロジェクト全体の再コンパイル
  3. 例外のコントロールの OnCreate ハンドラーをデバッグします。

コール スタック:

ntdll.dll!0000000076f7fd5c()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
kernel32.dll!0000000076df42d3()     
mfc90d.dll!AfxDeactivateActCtx(unsigned long dwFlags=0, unsigned __int64 ulCookie=2077018657900210161)  Line 260 + 0x19 bytes   C++

所見:

  1. WS_CHILD フラグをスキップすると、例外は発生しませんが、コントロールで OnCreate も呼び出されません!
  2. 例外を無視して続行すると、アプリケーションは正常に動作し、コントロールも正常に動作します。
  3. アプリの初期化中に AfxSetAmbientActCtx(FALSE) を呼び出すと、例外が抑制されます。しかし、正当化できない限り、これはハックだと思います。
4

5 に答える 5

11

これらの多くをヒットした後、根本的な問題を追跡する簡単な方法は、[デバッグ] -> [例外] に移動し、[スローされたすべての例外] を有効にすることであることがわかりました。次に、発火している他の例外があり、静かにキャッチされていることがわかりますが、アクティベーションコンテキストが台無しになっています。最初の例外を修正すると、アクティベーション コンテキストの例外は発生しなくなります。

于 2012-02-02T16:15:35.363 に答える
6

私の原因は、問題のあるコントロールクラスの初期化されていないメンバーによるものでした。コンストラクターで変数を初期化すると、問題が修正されました。だから私は AfxSetAmbientActCtx(FALSE) に頼る必要はありませんでした

于 2011-11-01T11:20:16.787 に答える
3

アプリの初期化中に AfxSetAmbientActCtx(FALSE) を呼び出すと、例外が抑制されます。しかし、正当化できない限り、これはハックだと思います。

MS Connectの「MFC のデフォルトの例外処理によりアクティベーション コンテキストで問題が発生する」に関する議論は、Microsoft からの回避策の提案であるハックを正当化するのに役立つかもしれません。

于 2011-10-05T12:55:19.147 に答える
0

同じ問題がありました。

私の場合、パスからファイルを読み取っていて、誤ってそのファイルを削除してしまいました。ファイルを元に戻すと、問題が解決しました。

于 2016-03-10T17:01:18.140 に答える
0

いくつかの ActiveX コントロールと共に IE をホストするプログラムで、不可解なクラッシュが発生しました。

以前のゼロ除算 (AX コントロールの 1 つによる) が最終的にこの例外とその後のアクセス違反を引き起こしたことが判明しました。

于 2016-11-08T15:59:54.083 に答える