2012-09-12 122 views
2

我在基於對話框的MFC應用程序中添加了「打開文件」對話框。現在,通過按下「打開」或「取消」按鈕關閉打開文件對話框後,正好一分鐘(!)我的應用程序崩潰。當它崩潰時,輸出中會發生以下情況:CFileDialog延遲崩潰

1)一堆Windows線程正在退出;

2)一堆COM異常(0x80010108「被調用的對象已斷開與其客戶端的連接」和0x800401FD「對象未連接到服務器」變種)正在拋出;

3)最後,發生未處理的異常:0xC0000005:訪問衝突讀取位置0xfeeefeee,調用堆棧指向ole32.dll。

要說我感到困惑是相當輕描淡寫。調用對話框的代碼如下:

CFileDialog fileDlg(TRUE, _T(".txt"), NULL, OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, 
        _T("Text file (*.txt)|*.txt||"), this); 
INT_PTR res = fileDlg.DoModal(); 

什麼會導致這樣的事情?

我該如何調試呢?

+1

對話框關閉後,您是否評論過所有事件,以確保它確實是導致此問題的對話框,而不是某個操作處理其結果? – GazTheDestroyer

+1

你可以發佈調用堆棧嗎? – Aesthete

+0

@GazTheDestroyer - 是的,沒有任何事情發生。 – obamator

回答

3

我在Windows中有這個確切問題7 x64和通過使所有Win32異常尚未選擇斷點(在VS2015例外選項卡上),我可以將它縮小與fundisc.dll的已知問題使用Microsoft提供的可選修補程序解決該問題:https://support.microsoft.com/en-us/kb/2494427

它還解決了我的電腦上文件資源管理器窗口在看似隨機時間崩潰的問題。所有這些都是由該修補程序修復的網絡COM對象中的一些死鎖引起的。