Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A capacidade de vincular dinamicamente uma DLL MFC regular à DLL MFC permite algumas configurações que são muito complicadas. Por exemplo, uma DLL MFC regular e o executável que a usa podem se vincular dinamicamente à DLL MFC e a qualquer DLLs de extensão MFC.
Essa configuração representa um problema em relação aos dados globais do MFC, como o ponteiro para o objeto atual CWinApp e os mapas de manipulação.
Antes da versão 4.0 do MFC, esses dados globais residiam na própria DLL do MFC e eram compartilhados por todos os módulos no processo. Como cada processo usando uma DLL do Win32 obtém sua própria cópia dos dados da DLL, esse esquema forneceu uma maneira fácil de rastrear dados por processo. Além disso, como o modelo AFXDLL presumia que haveria apenas um CWinApp objeto e apenas um conjunto de mapas de identificador no processo, esses itens poderiam ser rastreados na própria DLL MFC.
Mas com a capacidade de vincular dinamicamente uma DLL MFC regular à DLL MFC, agora é possível ter dois ou mais CWinApp objetos em um processo — e também dois ou mais conjuntos de mapas de identificador. Como o MFC acompanha quais devem ser usados?
A solução é dar a cada módulo (aplicativo ou DLL MFC regular) sua própria cópia dessas informações de estado global. Assim, uma chamada para AfxGetApp na DLL MFC regular retorna um ponteiro para o CWinApp objeto na DLL, não o do executável. Esta cópia por módulo dos dados globais do MFC é conhecida como um estado do módulo e é descrita na Nota Técnica MFC 58.
O procedimento de janela comum do MFC alterna automaticamente para o estado correto do módulo, para que você não precise se preocupar com isso em nenhum manipulador de mensagens implementado em sua DLL MFC regular. Mas quando o seu executável invoca a DLL MFC regular, é necessário definir explicitamente o estado do módulo atual para o da DLL. Para fazer isso, use a macro AFX_MANAGE_STATE em cada função exportada da DLL. Isso é feito adicionando a seguinte linha de código para o início das funções exportadas da DLL:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))