Compartilhar via


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 de DLL a DLL do aplicativo de chamada.

Quando chamado, essa macro define pModuleState, um ponteiro para um AFX_MODULE_STATE estrutura contendo dados global para o módulo, sistema autônomo o estado do módulo efetivo para o restante do escopo que contém a função. Após sair do escopo que contém a macro, o estado anterior do módulo efetivo é restaurado automaticamente.

Essa comutação é conseguida criando uma instância de um AFX_MODULE_STATE classe na pilha.Em seu construtor dessa classe obtém um ponteiro para o estado corrente do módulo e armazena em uma variável de membro e, em seguida, define pModuleState sistema autônomo o novo estado do módulo efetivo. Em seu destruidor, essa classe restaura o ponteiro armazenado em sua variável de membro sistema autônomo o estado do módulo efetivo.

Se você tiver uma função exportada, sistema autônomo aquele que inicia uma caixa de diálogo em sua DLL, você precisará adicionar o código a seguir para o início da função:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Isso alterna o estado corrente do módulo com o estado retornado de AfxGetStaticModuleState até o participante do escopo corrente.

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, na verdade, é armazenado na DLL.A causa é que informações de estado do módulo do MFC não foi alternadas, a AFX_MANAGE_STATE macro. O identificador de recurso é recuperado do estado do 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_STATE nã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 fica automaticamente o estado do módulo anterior InitInstance e switches-lo novamente após InitInstance Retorna. O mesmo é verdadeiro para todos os manipuladores de MAP da mensagem.DLLs normais, na verdade, têm um procedimento de janela mestre especial que alterne automaticamente o estado do módulo antes de qualquer mensagem de roteamento.

Consulte também

Conceitos

Gerenciamento de dados do estado dos módulos do MFC