Pontos de entrada de função de DLL exportado
Para funções exportadas de uma DLL, use o AFX_MANAGE_STATE macro para manter o estado global adequado ao alternar do módulo DLL para DLL do aplicativo de chamada.
Quando chamado, essa macro define pModuleState, um ponteiro para um AFX_MODULE_STATE estrutura contendo dados globais para o módulo, como o estado de módulo eficaz para o restante do escopo que contém a função.Após sair do escopo que contém a macro, o estado de módulo eficaz anterior é restaurado automaticamente.
Essa alternância é obtido criando uma instância de um AFX_MODULE_STATE classe na pilha.Em seu construtor dessa classe obtém um ponteiro para o estado atual do módulo e armazena em uma variável de membro e define pModuleState como o novo estado de módulo eficaz.Em seu destruidor, essa classe restaura o ponteiro armazenado na variável de membro como o estado de módulo eficaz.
Se você tiver uma função exportada, como um que inicia uma caixa de diálogo na DLL, você precisará adicionar o código a seguir ao início da função:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
Essa troca o estado atual do módulo com o estado retornado de AfxGetStaticModuleState até o final do escopo atual.
Problemas com recursos em DLLs ocorrerá se o AFX_MANAGE_STATE macro não é usada.Por padrão, o MFC usa o identificador de recurso do aplicativo principal para carregar o modelo de recurso.Este modelo é realmente armazenado na DLL.A causa é que informações de estado do módulo do MFC não foi comutadas pelo AFX_MANAGE_STATE macro.O identificador de recurso é recuperado do estado de módulo do MFC.O estado do módulo de switching não faz com que o identificador de recurso incorreto ser usado.
AFX_MANAGE_STATEnão precisa ser colocado em cada função na DLL.Por exemplo, InitInstance pode ser chamado pelo código do MFC no aplicativo sem AFX_MANAGE_STATE porque MFC mudará automaticamente o estado de módulo antes de InitInstance e, em seguida, os switches volta após InitInstance retorna.O mesmo é verdadeiro para todos os manipuladores de mapa da mensagem.DLLs regulares realmente têm um procedimento de janela mestre especial que automaticamente alterna o estado de módulo antes roteamento qualquer mensagem.