2011-10-05 7 views
6
itsAnalysisDataTable.CreateEx(WS_EX_CLIENTEDGE, AfxRegisterWndClass(CS_DBLCLKS, LoadCursor(NULL, IDC_ARROW), (HBRUSH)::GetStockObject(NULL_BRUSH), NULL), "AnalysiysTable", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, dialogItemRect, this, IDC_ANALYSIS_DATA_TABLE); 

Esta línea me ha costado dos días de esfuerzo sin solución. itsAnalysisDataTable es un control de Windows personalizado que tiene CWnd como su gran abuela. El control se ha utilizado con éxito en otros pasos sin problemas en nuestro código. este es un CPropertyPage.CreateEx Causas Excepción no controlada El contexto de activación que se está desactivando no es el más reciente activado

El problema que tengo es la línea provoca (y lo hace cada vez) un excepción no controlada en 0x76f7fd5c en MyProduct .exe (x64): 0xC015000F: El contexto de activación está desactivado no es el más reciente activa uno.

La excepción se produce en 32 bits también. Estoy en Windows 7 x64, VS 2008.

lo que ya he intentado:

  1. Habilitación de descanso en excepciones de Win32 en el depurador. No se produce ninguna excepción (excepto las excepciones de primera oportunidad de las que hay mucho en nuestro código y no tienen efecto)
  2. Recompilación del proyecto completo
  3. Depuración del controlador OnCreate para el control de las excepciones.

Pila de llamadas:

ntdll.dll!0000000076f7fd5c()  
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
kernel32.dll!0000000076df42d3()  
mfc90d.dll!AfxDeactivateActCtx(unsigned long dwFlags=0, unsigned __int64 ulCookie=2077018657900210161) Line 260 + 0x19 bytes C++ 

Observaciones:

  1. Si me salto la bandera WS_CHILD la excepción no se produce, pero también OnCreate no se llama en el control!
  2. Si ignoro la excepción y continúo, la aplicación funciona bien, el control también funciona bien.
  3. Llamar AfxSetAmbientActCtx (FALSE) durante la aplicación init suprime la excepción. Pero creo que esto es un truco, a menos que pueda justificarlo.
+1

El síntoma de "contexto de activación que se desactiva" a menudo es un síntoma en cascada de un contexto de activación de cruce de excepciones en sentido ascendente. Tal vez una de tus excepciones de primera oportunidad atrapada sea hacer esto. Vea si puede detectar y manejar la excepción de la primera oportunidad que ocurre justo antes de la excepción de "contexto de activación" más cercana a donde se lanza. –

+0

Depurar + Excepciones, marque las casillas lanzadas. –

Respuesta

11

Después de ver muchos de estos, encontré que la forma más sencilla de rastrear el problema raíz es ir a Depurar -> Excepciones y habilitar TODAS las excepciones lanzadas. Luego encontrarás que hay otra excepción que está disparando, que está atrapada silenciosamente, PERO estropea el contexto de activación. Una vez que corrija la primera excepción, la excepción de contexto de activación no ocurrirá.

6

Resulta que el mío se debió a un miembro no inicializado en la clase de control ofensiva. La inicialización de la variable en el constructor solucionó el problema. Así que no tuve que recurrir a AfxSetAmbientActCtx (FALSO)

0

Tenía el mismo problema.

En mi caso, estaba leyendo un archivo de una ruta y lo borré accidentalmente. Devolver el archivo resolvió el problema.

0

Tuve algunos bloqueos misteriosos en un programa que alojaba IE junto con varios controles ActiveX.

Resulta que una división anterior por cero (por uno de los controles AX) finalmente causó esta excepción y una Infracción de acceso posterior.

Cuestiones relacionadas