CORRECÇÃO: Assert em Appui1.cpp linha 215 no aplicativo MFC SDI/MDI

Traduções deste artigo Traduções deste artigo
ID do artigo: 193102 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você tenta exibir uma janela modal sem especificar explicitamente um pai em um manipulador de comandos de um aplicativo MFC SDI/MDI, onde a janela do quadro é destruída no manipulador de comando antes de exibir a janela restrita, você pode obter uma declaração em CCmdTarget::GetRoutingFrame_() (linha Appui1.cpp: 215) com depuração cria.

Nas compilações do aplicativo, janelas restritas podem se comportar janelas semelhantes sem janela restrita. Isso também será o caso se você atualizar um aplicativo MFC do Visual C++ 5.0 para Visual C++ 6.0 (ambas as versões do Visual C++ usam a DLL da MFC chamado Mfc42.dll).

Causa

Janelas restritas agora usar o membro de dados de quadro (m_pRoutingFrame) roteamento do estado do segmento para decidir sobre o proprietário em GetSafeOwner(). O problema é que o CFrameWnd definir como quadro de roteamento do estado do segmento atual é excluído, mas o estado do segmento não é atualizado para refletir esse fato.

Resolução

Defina quadro de roteamento do estado do segmento atual para NULL no destruidor de sua classe derivada de CFrameWnd que está sendo destruído:

CMyFrameWnd::~CMyFrameWnd()
   {

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

Situação

A Microsoft confirmou este é um bug em produtos Microsoft listados no começo deste artigo. Esse bug foi corrigido no Visual Studio 6.0 Service Pack 1.

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

Mais Informações

As janelas de quadro do MFC afetadas por esse problema podem ser do tipo CFrameWnd, CMDIFrameWnd, CMDIChildWnd e COleIPFrameWnd.

As janelas de janela restritas MFC afetadas são:
  • Diálogo
  • CPropertySheet
  • Folha de propriedades OLE [OleObject::DoVerb(OLEIVERB_PROPERTIES) invocado por meio de [ASCII 150]]
  • COleBusyDialog
  • Caixa de mensagem [chamada através de AfxMessageBox()]
  • Janela restrita MAPI [ao chamar MAPISendMail()]
  • Caixa de diálogo conexão de driver do SQL [ao chamar SQLDriverConnect()]

Etapas para reproduzir o problema

  1. Use AppWizard para gerar um exe do MFC que é um aplicativo baseado em MDI.
  2. Use ClassWizard para substituir OnCloseDocument da classe CDocument gerada pelo AppWizard.
  3. Editar a função de membro OnCloseDocument como mostrado aqui:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. Criar e executar o aplicativo.
  5. No menu Arquivo, clique em Fechar.
resultados: O seguinte erro aparece:
"Depuração Assertion Failed! Linha do arquivo: Appui1.cpp: 215 ".
Para corrigir esse problema no caso mencionado acima, adicione o seguinte código o destruidor para CChildFrame:

CChildFrame::~CChildFrame()
   {

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


(c) Microsoft Corporation 1998, todos os direitos reservados. Contribuições por Bret Bentzinger, Microsoft

Referências

Para obter mais informações sobre service packs do Visual Studio, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
194022O Visual Studio 6.0 service packs, o que, em que, por que
194295Como saber se um service pack do Visual Studio está instalado
193009INFO: Visual Studio 6.0 Service Pack 1 Leiame

Propriedades

ID do artigo: 193102 - Última revisão: sábado, 22 de fevereiro de 2014 - Revisão: 4.2
A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 193102

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