Base de conocimientos KB0236

Conflicto con Oracle SmartView: Excel se bloquea aparentemente al azar

Problema

Tengo instalados think-cell y Oracle SmartView. En algún momento mientras trabajo con Excel, me aparece un mensaje de error del tipo CRITICALWITHMSG n/a: std::terminate() y Excel se bloquea.

Mensaje de error de think-cell

Varios usuarios han informado de que el problema se producía en diversas situaciones, por ejemplo, al intentar:

  • cargar datos con SmartView;
  • conectarse al entorno de Oracle;
  • introducir valores escribiendo en una celda;
  • borrar el contenido de una celda de Oracle SmartView, p. ej., pulsando la tecla RETROCESO.

Análisis

Según el análisis que hemos realizado, parece que Oracle no está gestionando determinadas excepciones en su código. Este comportamiento no es compatible y puede provocar un bloqueo:

HSADDIN.DLL (que pertenece a SmartView) invoca a Excel::Window::PointsToScreenPixelsX dentro de una devolución de llamada del mensaje WM_TIMER, y esta llamada falla bastante a menudo con VBA_E_IGNORE. El contenedor CCW encapsula este valor HRESULT en una excepción _com_error, pero el valor no se gestiona y pasa explícitamente al mecanismo de envío del mensaje WM_TIMER de Windows. Dado que no se permite que las excepciones se escapen del código de la aplicación, es previsible que se produzca un bloqueo.

Sin embargo, el mecanismo de envío del mensaje WM_TIMER contiene, de manera predeterminada, un bloque catch-all __try __except, que captura la excepción y silencia las posibles consecuencias. Más recientemente, Office 365 dispuso que un ajuste bajo control de Microsoft invocara una puerta de funcionalidad denominada “Microsoft.Office.AppHost.ExposeTimerProcSeh”. Lo cual, a su vez, provocó que Excel siguiera las propias recomendaciones de Microsoft y deshabilitara el bloque catch-all __try __except, descrito anteriormente, invocando la función de API de Win32 SetUserObjectInformationW(..., UOI_TIMERPROC_EXCEPTION_SUPPRESSION, ...). De este modo, Excel se bloquea cuando se produce la excepción.

Desconocemos en qué momento habilita Microsoft este ajuste, pero hemos constatado que está habilitado en equipos en los que se produce el error. Si think-cell está instalado, este programa captura la excepción por accidente y muestra un mensaje de error. Es muy probable que todo esto se deba a un error fortuito de Oracle y que simplemente se haya olvidado de gestionar VBA_E_IGNORE en su complemento.

Solución

Desde think-cell nos resulta imposible evitar que se produzca el bloqueo. Póngase en contacto con el soporte técnico de Oracle SmartView para obtener una solución permanente.

Compartir