Entrar

CORRECÇÃO: Violação de acesso em MSDAER.DLL com _com_error exceções

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.

173645
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Ao usar o recurso de # Import do compilador, ADO, o provedor OLE DB 1.1 ODBC e ajuste de registro _com_error exceções, uma violação de acesso ocorre no MSDAER.DLL quando fechar um aplicativo.
Causa
Um método criado com o # Import pode lançar uma exceção _com_error. Quando ele lança a exceção, Release() não é chamado no ponteiro IErrorInfo que é retornado de GetErrorInfo(). Isso deixa o objeto de erro interno no provedor de ODBC OLEDB encalhado que causa a violação de acesso ocorrer como o aplicativo é desligado.
Resolução
Crie uma macro que pode ser usado para Release() o IErrorInfo interface no final do bloco "catch". Por exemplo:
   #define BUGFIX_RELEASE_IERRORINFO(error) \            IErrorInfo * pErr = error.ErrorInfo();  \            pErr->Release();                        \            pErr->Release();				
aqui é um exemplo de como você poderia usar:
   try   {     //.... call a #import generated method     if ( m_connection == NULL )   {      if(S_OK == m_connection.CreateInstance("ADODB.Connection.1", NULL,   CLSCTX_INPROC_SERVER))         m_connection->Open(varDataSource, varUserId, varPwd);      }   }   catch(_com_error & err)   {     // Error handling code...     ::MessageBox(NULL, (LPCSTR)err.Description(), _T("ADO Error"), MB_OK);     BUGFIX_RELEASE_IERRORINFO(err);   }				
Situação
A Microsoft confirmou este é um bug em produtos Microsoft listados no começo deste artigo. Esse bug foi corrigido no Visual Studio 97 Service Pack 3 e do Visual C++ versão 6.0.

Para obter mais informações, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
170365INFO: Visual Studio 97 Service Packs-, onde e por que
exceção não tratada AV

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 173645 - Última Revisão: 10/07/2013 06:14:13 - Revisão: 1.0

  • Microsoft Visual C++ 5.0 Enterprise Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbvc600fix kbvs97sp2fix KB173645 KbMtpt
Comentários