FIX: Asserzione in Appui1.cpp riga 215 nell'applicazione SDI o MDI MFC

Traduzione articoli Traduzione articoli
Identificativo articolo: 193102 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si si tenta di visualizzare una finestra a scelta obbligatoria senza specificare in modo esplicito un elemento padre in un gestore di comando di un'applicazione SDI o MDI di MFC, in cui la finestra cornice viene eliminata in Gestore del comando prima di visualizzare la finestra a scelta obbligatoria, un'asserzione potrebbe essere visualizzato in CCmdTarget::GetRoutingFrame_() (riga Appui1.cpp: 215) con debug genera.

Nelle build di rilascio dell'applicazione, a scelta obbligatoria di windows potrebbero funzionare finestre simile a non a scelta obbligatoria. Sarà anche il caso se si aggiorna un'applicazione MFC di Visual c ++ 5.0 per Visual c ++ 6.0 (entrambe le versioni di utilizzo di Visual c ++ alla DLL MFC denominato Mfc42.dll).

Cause

Finestre a scelta obbligatoria utilizzano il membro di dati di frame (m_pRoutingFrame) routing dello stato del thread per decidere il proprietario in GetSafeOwner(). Il problema è che il CFrameWnd impostare come frame di routing corrente dello stato thread viene eliminato, ma lo stato del thread non viene aggiornato per riflettere il fatto che.

Risoluzione

Impostare frame di routing corrente dello stato di thread NULL nel distruttore della classe CFrameWnd derivata che sta per essere eliminato:

CMyFrameWnd::~CMyFrameWnd()
   {

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

Status

Microsoft ha confermato che si tratta di un problema che riguarda solo i prodotti elencati all'inizio di questo articolo. Questo bug è stato risolto in Visual Studio 6.0 Service Pack 1.

Per ottenere il service pack, vedere:
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx

Informazioni

Finestre cornice MFC interessate da questo problema possono essere di tipo CFrameWnd, CMDIFrameWnd, CMDIChildWnd e COleIPFrameWnd.

Le finestre a scelta obbligatoria MFC interessate sono:
  • Finestra di dialogo
  • CPropertySheet
  • Finestra delle proprietà di OLE [OleObject::DoVerb(OLEIVERB_PROPERTIES) richiamato tramite [ASCII 150]]
  • COleBusyDialog
  • Finestra di messaggio [richiamata tramite AfxMessageBox()]
  • Finestra modale MAPI [durante la chiamata MAPISendMail()]
  • Dialogo di connessione driver SQL [durante la chiamata SQLDriverConnect()]

Procedura per riprodurre il problema

  1. Utilizzare la creazione guidata applicazione per generare un eseguibile MFC che è un'applicazione MDI.
  2. Utilizzare Creazione guidata classe per eseguire l'override OnCloseDocument della classe CDocument generata dalla creazione guidata applicazione.
  3. Modificare la funzione membro di OnCloseDocument, come illustrato di seguito:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. Compilare ed eseguire l'applicazione.
  5. Scegliere Chiudi dal menu file.
risultati: Viene visualizzato il seguente messaggio di errore:
"Debug asserzione non riuscita! File: Appui1.cpp riga: 215 ".
Per risolvere il problema nel caso descritto in precedenza, aggiungere il seguente codice nel distruttore di CChildFrame:

CChildFrame::~CChildFrame()
   {

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


(c) 1998 Microsoft Corporation, tutti i diritti riservati. Contributo di Bret Bentzinger, Microsoft

Riferimenti

Per ulteriori informazioni sui service pack di Visual Studio, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
194022Visual Studio 6.0 service pack, che cosa, dove, perché
194295Come riconoscere che è installato un service pack di Visual Studio
193009INFORMAZIONI: File Readme in Visual Studio 6.0 Service Pack 1

Proprietà

Identificativo articolo: 193102 - Ultima modifica: sabato 22 febbraio 2014 - Revisione: 4.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Foundation Class Library 4.2 alle seguenti piattaforme
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Chiavi: 
kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 193102
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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