REVISIÓN: Assert en Appui1.cpp línea 215 en aplicación MFC SDI y MDI

Seleccione idioma Seleccione idioma
Id. de artículo: 193102 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando intenta mostrar una ventana modal sin especificar explícitamente un elemento primario en un controlador de comandos de una aplicación MFC SDI o MDI, donde se destruye la ventana de marco en el controlador de comandos antes de mostrar la ventana modal, puede recibir una aserción en CCmdTarget::GetRoutingFrame_() (línea Appui1.cpp: 215) con la depuración se genera.

En versiones de lanzamiento de la aplicación, ventanas modales pueden comportarse ventanas similares a no modal. También será el caso si actualiza una aplicación MFC de Visual C++ 5.0 a Visual C++ 6.0 (ambas versiones de la DLL de MFC de uso de C++ denominada Mfc42.dll).

Causa

Ventanas modales ahora utilizan al miembro de datos de marco (m_pRoutingFrame) enrutamiento del estado del subproceso para decidir en el propietario en GetSafeOwner(). El problema es que la CFrameWnd establece como marco de enrutamiento del estado de subproceso actual se elimina, pero el estado del subproceso no se actualiza para reflejar ese hecho.

Solución

Establecer marco de enrutamiento del estado de subproceso actual a NULL en el destructor de la clase CFrameWnd que se está destruyendo:

CMyFrameWnd::~CMyFrameWnd()
   {

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

Estado

Microsoft ha confirmado que se trata de un error de los productos Microsoft enumerados al principio de este artículo. Este error se ha solucionado en Visual Studio 6.0 Service Pack 1.

Para obtener este service pack, consulte:
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx

Más información

Las ventanas de marco MFC afectadas por este problema pueden ser de tipo CFrameWnd, CMDIFrameWnd, CMDIChildWnd y COleIPFrameWnd.

Las ventanas MFC modales afectadas son:
  • Diálogo
  • CPropertySheet
  • Hoja de propiedades de OLE [OleObject::DoVerb(OLEIVERB_PROPERTIES) invocado a través de [ASCII 150]]
  • COleBusyDialog
  • Cuadro de mensaje [invocado a través de AfxMessageBox()]
  • Ventana modal de MAPI [cuando se llama a MAPISendMail()]
  • Cuadro de diálogo de conexión de controlador de SQL [cuando se llama a SQLDriverConnect()]

Pasos para reproducir este comportamiento

  1. Utilice el Asistente para aplicaciones para generar un exe MFC es una aplicación basada en MDI.
  2. Utilice ClassWizard para reemplazar OnCloseDocument de la clase CDocument generada por el Asistente para aplicaciones.
  3. Modificar la función de miembro de OnCloseDocument tal como se muestra aquí:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. Genere y ejecute la aplicación.
  5. En el menú Archivo, haga clic en Cerrar.
resultados: Aparece el mensaje de error siguiente:
"Error de aserción de depuración! Archivo: Appui1.cpp línea: 215 ".
Para corregir este problema en el caso mencionado anteriormente, agregue el código siguiente en el destructor de CChildFrame:

CChildFrame::~CChildFrame()
   {

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


(c) 1998 Microsoft Corporation, reservados todos los derechos. Contribuciones por Bret Bentzinger, Microsoft

Referencias

Para obtener más información acerca de los de Visual Studio service Pack, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
194022Service Pack de Visual Studio 6.0: qué son, dónde están y por qué son necesarios
194295Cómo saber que está instalado un service pack de Visual Studio
193009INFORMACIÓN: Archivo Léame Visual Studio 6.0 Service Pack 1

Propiedades

Id. de artículo: 193102 - Última revisión: domingo, 23 de febrero de 2014 - Versión: 4.2
La información de este artículo se refiere a:
  • Microsoft Foundation Class Library 4.2 sobre las siguientes plataformas
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palabras clave: 
kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 193102

Enviar comentarios

 

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