Base de conocimientos KB0207

Excel se bloquea al utilizar complementos de Add-in Express

Problema

Excel se bloquea y tengo otro complemento instalado, que usa Add-in Express

Los complementos de Add-in Express muestran el archivo adxloader.dll en el cuadro de diálogo Opciones de Excel (ArchivoOpcionesComplementos).

Causa

Un error conocido en Add-in Express podría ocasionar que Excel se bloquee si se usan complementos de terceros adicionales, como think-cell. A continuación, proporcionamos un resumen y una explicación detallada del problema.

Hemos informado de este problema a Add-in Express. Si desea ponerse en contacto con el personal de soporte técnico de Add-in Express y solicitar una corrección, indique el número de seguimiento de errores n.º 9291.

Resumen

Cuando Add-in Express ejecuta la función “UnSubclass” en una ventana, sigue usando la dirección del procedimiento de ventana almacenado para enviar un mensaje y da por sentado que sigue siendo actual. Si entre que se ejecuta la función “UnSubclass” y se usa la dirección del procedimiento de ventana almacenado se ejecuta otra función “UnSubclass”, la dirección del procedimiento de ventana deja de ser actual y, por tanto, se llama al procedimiento de ventana equivocado.

Detalles

En esta reproducción, el problema se debe a la función “SubClass” de una ventana de EXCEL7, en este seguimiento HWND=004301e4.

Apertura de la ventana

En primer lugar, think-cell ejecuta la función “SubClass” con SetWindowSubclass. La llamada de SetWindowLong sale de la autoridad central COMCTL32, de modo que se cambia el procedimiento de ventana de EXCEL a COMCTL32:

TRACE 2016-08-04T09:36:21Z thread 9052 tcaddin\detour\win\safesubclassimpl.cpp(215): 
Module C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0x1410A 
is subclassing window HWND 004301E4 Caption "Book2" Class EXCEL7 WndProc 
C:\PROGRAM FILES (X86)\MICROSOFT OFFICE\OFFICE15\EXCEL.EXE 15.0.4841.1000+0x21A55 Style 0x570B0000 ExStyle 0x00000000 
to C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0x2F45C

A continuación, Add-in Express ejecuta la función “SubClass” llamando a SetWindowLong directamente, de modo que se cambia el procedimiento de ventana de COMCTL32 a Add-in Express JITed, con código C# (sin nombre de módulo; JITed pasa a la memoria):

TRACE 2016-08-04T09:36:21Z thread 9052 tcaddin\detour\win\safesubclassimpl.cpp(215): 
Module 0x06B7FB84 is subclassing window HWND 004301E4 Caption "Book2" Class EXCEL7 
WndProc C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0x2F45C Style 0x570B0000 ExStyle 0x00000000 to 0x1D47BD7E

Cierre de la ventana

Add-in Express llegó el último, así que es el último de la cadena. Puede ejecutar una función “UnSubClass” llamando a SetWindowLong directamente, de modo que se cambia el procedimiento de ventana de Add-in Express JITed, con código C#, de nuevo a COMCTL32:

TRACE 2016-08-04T09:36:27Z thread 9052 tcaddin\detour\win\safesubclassimpl.cpp(215): 
Module 0x090CD19C is subclassing window HWND 004301E4 Caption "Book2" Class EXCEL7 
WndProc 0x1D47BD7E Style 0x470B0000 ExStyle 0x00000000 to 
C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0x2F45C

A continuación, think-cell ejecuta la función “UnSubClass” con RemoveWindowSubclass. La llamada de SetWindowLong sale de la autoridad central COMCTL32 y se cambia el procedimiento de ventana de COMCTL32 a EXCEL:

TRACE 2016-08-04T09:36:37Z thread 9052 tcaddin\detour\win\safesubclassimpl.cpp(215): 
Module C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0x1438F 
is subclassing window HWND 004301E4 Caption "Book2" Class EXCEL7 WndProc 
C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0x2F45C Style 0x470B0000 ExStyle 0x00000000 
to C:\PROGRAM FILES (X86)\MICROSOFT OFFICE\OFFICE15\EXCEL.EXE 15.0.4841.1000+0x21A55

Hasta ahora, ningún problema. Pero entonces sucede lo siguiente: COMCTL32 cambia de nuevo el procedimiento de ventana, esta vez de EXCEL.EXE a la dirección de DefWindowProc:

TRACE 2016-08-04T09:36:41Z thread 9052 tcaddin\detour\win\safesubclassimpl.cpp(215): 
Module C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_6.0.7601.18837_NONE_41E855142BD5705D\COMCTL32.DLL 6.10.7601.18837+0xDEC4C 
is subclassing window HWND 004301E4 Caption "Book2" Class EXCEL7 WndProc 
C:\PROGRAM FILES (X86)\MICROSOFT OFFICE\OFFICE15\EXCEL.EXE 15.0.4841.1000+0x21A55 Style 0x470B0000 ExStyle 0x00000000 
to C:\WINDOWS\SYSWOW64\NTDLL.DLL 6.1.7601.23455+0x22FBD (=DefWindowProc)

Con think-cell solo, esto no ocurre. La cuestión es: ¿Por qué hace eso COMCTL32? Claramente, es un error desvincular el procedimiento de ventana de EXCEL.EXE. Así pues, esta es la pila de llamadas que lleva a COMCTL32 a llamar a SetWindowLong:

tcaddin.dll!SetWindowLongPtrW (HWND__ * __formal, int __formal, long __formal) 
with hWnd=004301e4, which is our EXCEL7 window, and dwNewLong= 77102FBD=DefWindowProc
comctl32.dll!_SubclassDeath@16 () Unknown
COMCTL32 realizes that it gets called for a window that it is no longer associated 
with. It must think this is happening from a subclassing chain and reacts in panic by SetWindowLong(DefWindowProc) to ensure this never happens again.

comctl32.dll!_MasterSubclassProc@16 () Unknown
user32.dll!_InternalCallWinProc@20 () Unknown
user32.dll!_UserCallWinProcCheckWow@32 () Unknown
user32.dll!_CallWindowProcAorW@24 () Unknown

user32.dll!_CallWindowProcW@20 () Unknown
Someone (presumably Add-in Express) calls CallWindowProc with lpPrevWndFunc=6e32f45c, which is COMCTL::MasterSubclassProc hWnd=004301e4, which is our EXCEL7 window, Msg=00000002=WM_DESTROY, wParam=00000000, lParam=00000000
This is clearly wrong, COMCTL32 is no longer associated with our EXCEL7 window.

090c6dba() Unknown
[Frames below may be incorrect and/or missing]
090c1cce() Unknown
06b7fe7c() Unknown

081dd1ce() Unknown
code with no module is entered here from the CLR, probably JIT'ed code of 
Add-in Express

clr.dll!UM2MThunk_Wrapper(void *) Unknown
clr.dll!Thread::DoADCallBack(struct ADID,void (*)(void *),void *,int) Unknown
clr.dll!_UM2MDoADCallBack@16 () Unknown
081dd227() Unknown
user32.dll!_InternalCallWinProc@20 () Unknown
user32.dll!_UserCallWinProcCheckWow@32 () Unknown
user32.dll!_DispatchClientMessage@24 () Unknown
user32.dll!___fnDWORD@4 () Unknown
ntdll.dll!_KiUserCallbackDispatcher@12 () Unknown
user32.dll!_NtUserDestroyWindow@4 () Unknown

Conclusión

Cuando Add-in Express ejecuta la función “UnSubclass” de una ventana, usa la dirección del procedimiento de ventana almacenado para enviar un mensaje y da por sentado que sigue siendo actual. Si entre que se ejecuta la función “UnSubclass” y se usa la dirección del procedimiento de ventana almacenado se ejecuta otra función “UnSubclass”, la dirección del procedimiento de ventana deja de ser actual y, por tanto, se llama al procedimiento de ventana equivocado.

Póngase en contacto con el soporte técnico

Desactive temporalmente el complemento que usa Add-in Express, como se explica en el artículo KB0091.

  • Si el problema solo se produce cuando se activa el complemento de Add-In Express, póngase en contacto con el proveedor de este complemento. Por lo general, resulta más efectivo si usted, como cliente, tramita una incidencia de soporte técnico con el proveedor.

  • Póngase en contacto con nuestro equipo de soporte técnico si sigue teniendo problemas con think-cell tras desactivar el otro complemento.

    Envíenos los archivos de registro de think-cell. Para ello, abra PowerPoint y vaya a Insertarthink-cellMásSolicitar soporte técnico. Los archivos de registro se adjuntarán automáticamente a un mensaje de correo electrónico nuevo.

    Si esto no funciona, puede encontrar los archivos de registro como se explica a continuación:

    • Abra una nueva ventana del Explorador de Windows y escriba

      %LOCALAPPDATA%\think-cell

      en el campo de dirección y pulse Intro.

    • Si desea examinar estos directorios pero no los puede ver, probablemente estén configurados como invisibles. Puede cambiar esto en el Explorador de Windows seleccionando:

      • Windows Vista y Windows 7:
        OrganizarOpciones de carpeta y de búsquedaVerMostrar archivos y carpetas ocultos.
      • Windows 8, Windows 8.1 y Windows 10:
        VerMostrar u ocultarElementos ocultos.
    • Envíe todos los archivos con la extensión .log incluidos en esta carpeta a nuestro equipo de soporte técnico. Puede ser cualquiera de los archivos siguientes: POWERPNT[_log].log, EXCEL[_log].log, TCMAIL[_log].log, TCUPDATE[_log].log, setup_think-cell_xxxxx[_log].log.