REVISIÓN: Infracción de acceso en MSDAER.DLL con _com_error excepciones

Seleccione idioma Seleccione idioma
Id. de artículo: 173645 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Síntomas

Se cuando se utiliza la característica de # import del compilador, ADO, el proveedor de ODBC OLE DB 1.1 y reventado _com_error excepciones, acceso produce una infracción en MSDAER.DLL al cerrar una aplicación.

Causa

Creado con # import un método puede producir una excepción _com_error. Cuando se produce la excepción, Release() no se llama en el puntero de IErrorInfo que se devuelve desde GetErrorInfo(). Esto deja el objeto de error interno en el proveedor OLEDB de ODBC no válidos que hace que la infracción de acceso se producen cuando la aplicación se cierra.

Solución

Cree una macro que puede utilizarse para Release() interfaz IErrorInfo al final del bloque "catch". Por ejemplo:
   #define BUGFIX_RELEASE_IERRORINFO(error) \ 
           IErrorInfo * pErr = error.ErrorInfo();  \ 
           pErr->Release();                        \ 
           pErr->Release();
				
aquí es un ejemplo de cómo podría utilizar:
   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);
   }
				

Estado

Microsoft ha confirmado que se trata de un error de los productos Microsoft enumerados al principio de este artículo. Este error se ha corregido en Service Pack 3 de Visual Studio 97 y Visual C++ versión 6.0.

Si desea más información, consulte el siguiente artículo de Microsoft Knowledge Base:
170365INFORMACIÓN: 97 Service Pack de Visual Studio-, dónde están y por qué

Propiedades

Id. de artículo: 173645 - Última revisión: viernes, 24 de enero de 2014 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Visual C++ 5.0 Enterprise Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbbug kbfix kbvc600fix kbvs97sp2fix KB173645 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 173645

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