Compartilhar via


Módulo de estados de uma DLL regular dinamicamente vinculada ao MFC

A capacidade de vincular dinamicamente uma DLL normal para a DLL da MFC permite algumas configurações que são muito complicadas.Por exemplo, uma DLL regular e o executável que o utiliza podem ambos dinamicamente vincular para a DLL da MFC e as DLLs de extensão.

Esta configuração representa um problema com relação aos dados global MFC, sistema autônomo o ponteiro para o corrente CWinApp mapas de objeto e a alça.

Antes de MFC versão 4.0, esses dados global residiam na DLL MFC propriamente dito e foi compartilhados por todos os módulos no processo.Como cada processo usando uma DLL Win32 obtém sua própria cópia dos dados da DLL, esse esquema fornecido uma maneira fácil de controlar os dados por processo.Além disso, porque o modelo AFXDLL provável que ele que deve haver apenas um CWinApp objeto e apenas um conjunto de mapas de identificador do processo, esses itens podem ser controlados na DLL da MFC propriamente dito.

Mas com a capacidade de vincular dinamicamente uma DLL normal para a DLL da MFC, é possível ter dois ou mais CWinApp objetos em um processo — e também dois ou mais conjuntos de mapas de identificador. Como MFC controlar de quais deve usar?

A solução é dar a cada módulo (aplicativo ou DLL regular) sua própria cópia dessas informações de estado global.Assim, uma telefonar para AfxGetApp na DLL regular retorna um ponteiro para o CWinApp objeto da dll, não aquele no executável. Esta cópia por módulo de dados MFC global é conhecida sistema autônomo um módulo de estado e é descrita em Nota técnica MFC 58.

O procedimento de janela MFC comuns automaticamente alterna para o estado do módulo correto, sendo assim, você não precisa preocupar na quaisquer manipuladores de mensagens implementados na sua DLL regular.Mas quando seu executável chama dll regular, você deve conjunto explicitamente o estado corrente do módulo para o para a DLL.Para fazer isso, use o AFX_MANAGE_STATE macro em cada função exportada de DLL.Isso é concluído adicionando a linha de código a seguir ao início das funções exportadas da DLL:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

O que você deseja saber mais sobre?

Consulte também

Conceitos

DLLs