Você está offline; aguardando reconexão

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

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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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:
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
ligar MfcDocView

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 193102 - Última Revisão: 02/23/2014 07:59:28 - Revisão: 4.2

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbqfe kbbug kbdocview kbfix kbvc600sp1fix kbvs600sp1fix kbvs600sp2fix KB193102 KbMtpt
Comentários