Update: Assert in Appui1.cpp Zeile 215 in MFC SDI/MDI-Anwendung

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 193102 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Beim Versuch, ein modales Fenster anzeigen, ohne explizite Angabe einer übergeordnetes in ein Befehlshandler einer MFC-SDI/MDI-Anwendung, in denen das Rahmenfenster im Befehl Ereignishandler zerstört wird, bevor das modale Fenster angezeigt, Sie erhalten eine Assertion in CCmdTarget::GetRoutingFrame_() (Appui1.cpp Zeile: 215) mit Debuginformationen erstellt.

In Releasebuilds der Anwendung möglicherweise modale Fenster ähnelt nicht modale Fenster Verhalten. Dies wird auch der Fall sein, wenn Sie eine MFC-Anwendung aus Visual C++ 5.0, Visual C++ 6.0 aktualisieren (beide Versionen von Visual C++ verwenden der MFC-DLL mit Mfc42.dll).

Ursache

Modale Fenster verwenden nun das routing Frame-Datenelement (M_pRoutingFrame) des Threadstatus entscheiden, die der Besitzer in GetSafeOwner(). Das Problem ist, dass die CFrameWnd, festgelegt den Threadstatus aktuellen routing Rahmen gelöscht, aber der Threadzustand wird nicht aktualisiert, um die Tatsache widerzuspiegeln.

Lösung

Setzen Sie den Threadstatus aktuellen routing Frame auf NULL in der Destruktor der CFrameWnd-abgeleitete Klasse, die zerstört wird:

CMyFrameWnd::~CMyFrameWnd()
   {

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

Status

Microsoft hat bestätigt, dass es sich dabei um einen Fehler in den Microsoft-Produkten handelt, die zu Beginn dieses Artikels aufgeführt sind. Dieser Bug wurde in Visual Studio 6.0 Service Pack 1 behoben.

Dieses Servicepack erhalten, finden:
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx

Weitere Informationen

Typ CFrameWnd, CMDIFrameWnd, CMDIChildWnd und COleIPFrameWnd können die MFC-Rahmenfenstern von diesem Problem betroffen sein.

Die MFC modale Fenster betroffen sind:
  • Dialogfeld
  • CPropertySheet
  • OLE-Eigenschaftenseite [OleObject::DoVerb(OLEIVERB_PROPERTIES) aufgerufen, bis [ASCII 150]]
  • COleBusyDialog
  • Meldungsfeld [durch AfxMessageBox() aufgerufen]
  • MAPI-modalen Fenster [beim Aufrufen von MAPISendMail()]
  • Dialogfeld SQL Driver Verbindung [beim Aufrufen von SQLDriverConnect()]

Schritte zum Reproduzieren des Verhaltens

  1. Verwenden Sie Anwendungs-Assistenten, um ein MFC-Exe zu generieren, die eine MDI-basierte Anwendung ist.
  2. Verwenden Sie Klassen-Assistenten, um OnCloseDocument der CDocument-Klasse vom Anwendungs-Assistenten generierten zu überschreiben.
  3. Bearbeiten Sie die OnCloseDocument-Memberfunktion, wie hier gezeigt:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. Erstellen Sie die Anwendung, und führen Sie sie aus.
  5. Klicken Sie auf im Menü Datei auf Schließen.
Ergebnisse: Die folgende Fehlermeldung wird angezeigt:
"Debug Assertionsfehler! Datei: Appui1.cpp Zeile: 215 ".
Fügen Sie zur Behebung dieses Problems im oben genannten Fall den folgenden Code in der Destruktor für CChildFrame:

CChildFrame::~CChildFrame()
   {

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


(c) 1998 Microsoft Corporation, alle Rechte vorbehalten. Beiträge von Bret Bentzinger, Microsoft

Informationsquellen

Weitere Informationen zu Visual Studio Servicepacks finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
194022Visual Studio 6.0 Service packs, was, wo, warum
194295Wie Sie feststellen, dass ein Visual Studio Servicepack installiert ist
193009INFO: Visual Studio 6.0 Servicepack 1-Infodatei

Eigenschaften

Artikel-ID: 193102 - Geändert am: Samstag, 22. Februar 2014 - Version: 4.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Keywords: 
kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 193102
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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