FIX: 判斷提示 MFC SDI MDI 應用程式中的 Appui1.cpp 一行 215

文章翻譯 文章翻譯
文章編號: 193102 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

徵狀

當您嘗試顯示強制回應視窗而毋需明確地指定父代中的何處框架視窗終結命令處理常式中顯示強制回應視窗前的 MFC SDI MDI 應用程式的命令處理常式,CCmdTarget::GetRoutingFrame_() 中仍可能會看到一個判斷提示 (Appui1.cpp 線條: 215) 與偵錯組建。

在應用程式的 [發行] 組建強制回應視窗可能行為類似於非強制回應視窗。如果您更新 MFC 應用程式從 Visual C++ 5.0 為 Visual C++ 6.0 中 (這兩個版本的 Visual C++ 使用 MFC DLL 命名 MFC42.dll),這也會是大小寫。

發生的原因

強制回應視窗現在會使用執行緒狀態的路由的圖文框的資料成員 (m_pRoutingFrame) 來決定在 GetSafeOwner() 擁有者。問題就是 [CFrameWnd 設定為刪除執行緒狀態目前的路由框架,但執行緒狀態不會更新以反映這件事。

解決方案

設定為 NULL 的執行緒狀態目前的路由框架,在遭到終結您 CFrameWnd 衍生類別的解構函式中:

CMyFrameWnd::~CMyFrameWnd()
   {

      if( AfxGetThreadState()->m_pRoutingFrame == this )
      {
         AfxGetThreadState()->m_pRoutingFrame = NULL;
      }
   }
				

狀況說明

Microsoft 已確認這是在本篇文章開頭所列的 Microsoft 產品中有錯誤。這個 Bug 已修正在 Visual Studio 6.0 服務封包 1。

若要取得這個 Service Pack,請參閱:
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx

其他相關資訊

此問題影響的 MFC 框架視窗可屬於型別 CFrameWnd,CMDIFrameWnd、 CMDIChildWnd 和 COleIPFrameWnd。

受影響的 MFC 強制回應視窗是:
  • 對話方塊
  • CPropertySheet
  • OLE 屬性工作表 [已叫用 [ASCII 150] 透過 OleObject::DoVerb(OLEIVERB_PROPERTIES)]
  • COleBusyDialog
  • [透過 AfxMessageBox() 叫用] 的訊息方塊
  • [呼叫 MAPISendMail()] 時 MAPI 強制回應視窗
  • 驅動程式的 SQL 連線] 對話方塊 [呼叫 SQLDriverConnect()] 時

重製行為的步驟

  1. 請使用 AppWizard 產生是 MDI 基礎的應用程式的 MFC exe。
  2. 請使用 ClassWizard 覆寫 OnCloseDocument CDocument 類別 AppWizard 產生。
  3. 編輯 OnCloseDocument 成員函式,如下所示:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. 建置並執行應用程式。
  5. 在 [檔案] 功能表上按一下 [關閉]。
結果:會出現下列錯誤:
「 偵錯判斷提示已失敗!檔案: Appui1.cpp 行: 215 」。
若要修正這個問題在最上面提到的情況下,解構函式中加入下列程式碼的 CChildFrame:

CChildFrame::~CChildFrame()
   {

      if( AfxGetThreadState()->m_pRoutingFrame == this )
      {
         AfxGetThreadState()->m_pRoutingFrame = NULL;
      }
   }
				


(c) [Microsoft Corporation 1998 年,[保留所有的權限]。由 Bret Bentzinger Microsoft 所佔的比重

?考

如需有關 Visual Studio Service Pack 的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
194022Visual Studio 6.0 服務封裝什麼、 何處,為何
194295如何分辨 Visual Studio Service Pack 安裝
193009資訊: Visual Studio 6.0 Service Pack 1 讀我

屬性

文章編號: 193102 - 上次校閱: 2014年2月23日 - 版次: 4.2
這篇文章中的資訊適用於:
  • Microsoft Foundation Class Library 4.2?應用於:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
關鍵字:?
kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:193102
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com