Gerenciando os dados de estado dos módulos MFC

Este artigo discute os dados de estado dos módulos MFC e como esse estado é atualizado quando o fluxo de execução (o código de caminho passa por um aplicativo durante a execução) entra e sai de um módulo. Outro tópico discutido é a alternância dos estados do módulo com as macros AFX_MANAGE_STATE e METHOD_PROLOGUE.

Observação

O termo "módulo" se refere a um programa executável ou a uma DLL (ou conjunto de DLLs) que opera independentemente do restante do aplicativo, mas usa uma cópia compartilhada da DLL do MFC. O controle ActiveX é um exemplo típico de um módulo.

Conforme mostrado na figura a seguir, o MFC tem dados de estado para cada módulo usado em um aplicativo. Exemplos desses dados incluem identificadores de instância do Windows (usados para carregar recursos), ponteiros para o atual CWinApp e CWinThread objetos de um aplicativo, contagens de referência do módulo OLE e uma variedade de mapas que mantêm as conexões entre identificadores de objeto do Windows e instâncias correspondentes de objetos MFC. No entanto, quando um aplicativo usa vários módulos, os dados de estado de cada módulo não são do aplicativo todo. Em vez disso, cada módulo tem sua própria cópia privada dos dados de estado do MFC.

Diagram showing the state data of a single module.
Dados de estado de um único módulo (aplicativo)

Os dados de estado de um módulo estão contidos em uma estrutura e estão sempre disponíveis por meio de um ponteiro para essa estrutura. Quando o fluxo de execução entra em um módulo específico, conforme mostrado na figura a seguir, o estado desse módulo deve ser o estado "atual" ou "efetivo". Portanto, cada objeto de conversa tem um ponteiro para a estrutura de estado efetiva desse aplicativo. Manter esse ponteiro atualizado a todo momento é essencial para gerenciar o estado global do aplicativo e manter a integridade do estado de cada módulo. O gerenciamento incorreto do estado global pode levar a um comportamento imprevisível do aplicativo.

State data of multiple modules.
Dados de estado de vários módulos

Em outras palavras, cada módulo é responsável por alternar corretamente entre estados de módulo em todos os seus pontos de entrada. “Ponto de entrada" é qualquer lugar onde o fluxo de execução pode inserir o código do módulo. Os pontos de entrada incluem:

Confira também

Tópicos gerais do MFC