CORRECÇÃO: Violação de acesso em MSDAER.DLL com _com_error excepçõ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 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.

173645
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
Quando utilizar a funcionalidade de #import compilador, ADO, o fornecedor de OLE DB 1.1 ODBC e véu _com_error excepções, ocorre uma violação de acesso no MSDAER.DLL, quando fechar uma aplicação.
Causa
Um método criado com #import pode accionar uma excepção _com_error. Quando lança-lo a excepção, Release() não é chamada no ponteiro IErrorInfo que é devolvido de GetErrorInfo(). Esta opção deixa o objecto de erro interno no fornecedor OLEDB ODBC stranded que faz com que a violação de acesso a ocorrer à medida que a aplicação encerra.
Resolução
Crie uma macro que pode ser utilizado para Release() o IErrorInfo interface no fim do bloco "chamar". Por exemplo:
   #define BUGFIX_RELEASE_IERRORINFO(error) \            IErrorInfo * pErr = error.ErrorInfo();  \            pErr->Release();                        \            pErr->Release();				
aqui é um exemplo de como utilizaria-:
   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);   }				
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 97 Service Pack 3 e Visual C++ 6.0.

Para mais informações, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
170365INFO: Visual Studio 97 Service Packs - O, onde e por que razão
excepção não processada AV

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 173645 - Última Revisão: 02/09/2014 08:20:26 - Revisão: 1.0

  • Microsoft Visual C++ 5.0 Enterprise Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbvc600fix kbvs97sp2fix KB173645 KbMtpt
Esta informação foi útil?