CORRECÇÃO: Declarar em Appui1.cpp linha 215 na aplicação MFC SDI/MDI

Traduções de Artigos Traduções de Artigos
Artigo: 193102 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando tenta visualizar uma janela modal sem especificar explicitamente um principal num processador de comandos da aplicação MFC SDI/MDI, onde a janela de moldura é destruída no processador de comandos antes de apresentar a janela modal, poderá obter uma asserção de CCmdTarget::GetRoutingFrame_() (linha Appui1.cpp: 215) com depuração cria.

Em versões versão da aplicação, janelas modais podem funcionar janelas semelhantes para não modal. Também será o caso, se actualizar uma aplicação MFC a partir do Visual C++ 5.0 Visual C++ 6.0 (ambas as versões de utilização do Visual C++ DLL MFC denominado MFC42.dll).

Causa

Janelas modais agora utilizam o membro de dados de frame encaminhamento (m_pRoutingFrame) do estado do thread para decidir no proprietário do GetSafeOwner(). O problema é que o CFrameWnd definido como actual encaminhamento frame do estado thread é eliminada, mas o estado do thread não é actualizado para reflectir desse facto.

Resolução

Defina actual frame encaminhamento do estado thread para NULL no processo de destruição a classe CFrameWnd derivada que está a ser destruído:

CMyFrameWnd::~CMyFrameWnd()
   {

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

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo. Este erro 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ção

As janelas de moldura MFC afectadas por este problema podem ser do tipo CFrameWnd, CMDIFrameWnd CMDIChildWnd e COleIPFrameWnd.

As janelas modais MFC afectadas são:
  • Diálogo
  • CPropertySheet
  • Folha de propriedades OLE [OleObject::DoVerb(OLEIVERB_PROPERTIES) invocado através de [ASCII 150]]
  • COleBusyDialog
  • Caixa de mensagem [invocada através da AfxMessageBox()]
  • Janela modal MAPI [ao chamar MAPISendMail()]
  • Caixa de diálogo ligação de controlador SQL [ao chamar SQLDriverConnect()]

Passos para reproduzir o comportamento

  1. Utilize AppWizard para gerar um exe MFC que é uma aplicação baseada em MDI.
  2. Utilize ClassWizard para substituir OnCloseDocument da classe CDocument gerada pelo AppWizard.
  3. Editar a função de membro OnCloseDocument tal como mostrado aqui:
          void CMyDoc::OnCloseDocument()
          {
             CDocument::OnCloseDocument();
             AfxMessageBox("The Document is Closed");
          }
    					
  4. Criar e executar a aplicação.
  5. No menu Ficheiro, clique em Fechar.
resultados: Aparece o seguinte erro:
"Falha de asserção de depuração! Ficheiro: Appui1.cpp linha: 215 ".
Para corrigir este problema caso acima mencionados, adicione o código seguinte no processo de destruição para CChildFrame:

CChildFrame::~CChildFrame()
   {

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


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

Referências

Para obter mais informações sobre service packs do Visual Studio, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
194022Visual Studio 6.0 service packs, o que, em que, por que razão
194295Como saber que um Visual Studio service pack está instalado
193009INFO: Visual Studio 6.0 Service Pack 1 Leia-me

Propriedades

Artigo: 193102 - Última revisão: 23 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 193102

Submeter comentários

 

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