Administrar los datos de estado de los módulos MFC

En este artículo se describen los datos de estado de los módulos MFC y cómo se actualiza este estado cuando el flujo de ejecución (la ruta que toma el código por una aplicación al ejecutarse) entra y sale de un módulo. También se menciona cómo cambiar los estados del módulo con las macros AFX_MANAGE_STATE y METHOD_PROLOGUE.

Nota:

El término "módulo" aquí hace referencia a un programa ejecutable, o a un archivo DLL (o conjunto de archivos DLL), que funciona independientemente del resto de la aplicación, pero usa una copia compartida del archivo DLL de MFC. Un control ActiveX es un ejemplo típico de un módulo.

Como se muestra en la figura siguiente, MFC tiene datos de estado para cada uno de los módulos que se usa en una aplicación. Algunos ejemplos de estos datos son los identificadores de instancia de Windows (que se usan para cargar recursos), los punteros a los objetos actuales CWinApp y CWinThread de una aplicación, los recuentos de referencias de módulo OLE y una variedad de asignaciones que mantienen las conexiones entre los identificadores de objetos de Windows y las instancias correspondientes de objetos MFC. Aun así, cuando una aplicación usa varios módulos, los datos de estado de cada módulo no son de toda la aplicación. En su lugar, cada módulo tiene su propia copia privada de los datos de estado de MFC.

Diagram showing the state data of a single module.
Datos de estado de un solo módulo (aplicación)

Los datos de estado de un módulo se encuentran en una estructura y siempre están disponibles mediante un puntero a esa estructura. Cuando el flujo de ejecución entra en un módulo determinado, como se muestra en la figura siguiente, el estado del módulo debe ser "actual" o "efectivo". Por lo tanto, cada objeto de subproceso tiene un puntero a la estructura de estado efectivo de esa aplicación. Es fundamental tener actualizado este puntero en todo momento, a fin de administrar el estado global de la aplicación y conservar la integridad del estado de cada módulo. La administración incorrecta del estado global puede provocar un comportamiento imprevisible de la aplicación.

State data of multiple modules.
Datos de estado de varios módulos

En otras palabras, cada módulo es responsable de cambiar correctamente entre los estados del módulo en todos sus puntos de entrada. Un "punto de entrada" es cualquier lugar donde el flujo de ejecución puede escribir el código del módulo. Los puntos de entrada incluyen:

Consulte también

Temas generales de MFC