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.
Uma DLL MFC regular dinamicamente vinculada ao MFC é uma DLL que usa MFC internamente, e as funções exportadas na DLL podem ser chamadas por executáveis MFC ou não-MFC. Como o nome descreve, esse tipo de DLL é construído usando a versão de biblioteca de vínculo dinâmico do MFC (também conhecida como a versão compartilhada do MFC). As funções geralmente são exportadas de uma DLL MFC regular usando a interface C padrão.
Você deve adicionar a AFX_MANAGE_STATE macro no início de todas as funções exportadas em DLLs MFC regulares que se vinculam dinamicamente ao MFC para definir o estado atual do módulo para o 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( ))
Uma DLL MFC regular, dinamicamente vinculada ao MFC tem os seguintes recursos:
Este é um novo tipo de DLL introduzido pelo Visual C++ 4.0.
O executável do cliente pode ser escrito em qualquer linguagem que suporte o uso de DLLs (C, C++, Pascal, Visual Basic e assim por diante); não tem de ser uma aplicação MFC.
Ao contrário da DLL MFC regular ligada estaticamente, este tipo de DLL está dinamicamente ligado à DLL MFC (também conhecida como a DLL MFC partilhada).
A biblioteca de importação MFC vinculada a esse tipo de DLL é a mesma usada para DLLs de extensão MFC ou aplicativos que usam a DLL MFC: MFCxx(D).lib.
Uma DLL MFC regular, dinamicamente vinculada ao MFC tem os seguintes requisitos:
Essas DLLs são compiladas com _AFXDLL definida, tal como um executável que está dinamicamente ligado à DLL MFC. Mas _USRDLL também é definido, assim como uma DLL MFC regular que está estaticamente ligada ao MFC.
Esse tipo de DLL deve instanciar uma classe derivada
CWinApp.Este tipo de DLL usa o
DllMainfornecido pelo MFC. Coloque todo o código de inicialização específico da DLL na função de membroInitInstancee o código de terminação emExitInstancecomo em um aplicativo MFC normal.
Como esse tipo de DLL usa a versão da biblioteca de vínculo dinâmico do MFC, você deve definir explicitamente o estado atual do módulo como o da DLL. Para fazer isso, use a macro AFX_MANAGE_STATE no início de cada função exportada da DLL.
DLLs MFC regulares devem ter uma CWinAppclasse derivada e um único objeto dessa classe de aplicativo, assim como um aplicativo MFC. No entanto, o CWinApp objeto da DLL não tem uma bomba de mensagem principal, assim como o CWinApp objeto de um aplicativo.
Observe que o CWinApp::Run mecanismo não se aplica a uma DLL, porque o aplicativo possui a bomba de mensagem principal. Se a DLL exibir caixas de diálogo sem moderação ou tiver uma janela de quadro principal própria, a bomba de mensagem principal do aplicativo deverá chamar uma rotina exportada por DLL que chama CWinApp::PreTranslateMessage.
Coloque toda a inicialização específica da CWinApp::InitInstance DLL na função de membro como em um aplicativo MFC normal. A CWinApp::ExitInstance função de membro da sua CWinApp classe derivada é chamada a partir da função DllMain fornecida pelo MFC antes que a DLL seja descarregada.
Você deve distribuir as DLLs compartilhadas MFCx0.dll e Msvcr*0.dll (ou arquivos semelhantes) com seu aplicativo.
Uma DLL que está dinamicamente vinculada ao MFC também não pode vincular estaticamente ao MFC. As aplicações ligam-se a DLLs MFC normais que estão dinamicamente associadas ao MFC, tal como qualquer outra DLL.
Os símbolos geralmente são exportados de uma DLL MFC regular usando a interface C padrão. A declaração de uma função exportada de uma DLL MFC regular tem a seguinte aparência:
extern "C" __declspec(dllexport) MyExportedFunction( );
Todas as alocações de memória dentro de uma DLL MFC regular devem permanecer dentro da DLL; a DLL não deve passar ou receber do executável de chamada qualquer um dos seguintes:
ponteiros para objetos MFC
ponteiros para memória alocada pelo MFC
Se você precisar fazer qualquer um dos itens acima, ou se você precisar passar objetos derivados do MFC entre o executável de chamada e a DLL, então você deve criar uma DLL de extensão MFC.
É seguro passar ponteiros para a memória que foram alocados pelas bibliotecas de execução do C entre uma aplicação e uma DLL, somente se fizer uma cópia dos dados. Você não deve excluir ou redimensionar esses ponteiros ou usá-los sem fazer uma cópia da memória.
Ao criar uma DLL MFC regular que se vincula dinamicamente ao MFC, você precisa usar o AFX_MANAGE_STATE de macro para alternar o estado do módulo MFC corretamente. Isso é feito adicionando a seguinte linha de código para o início das funções exportadas da DLL:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
A macro AFX_MANAGE_STATE não deve ser usada em DLLs MFC regulares que estaticamente se vinculam ao MFC ou em DLLs de extensão MFC. Para obter mais informações, consulte Gerenciando os dados de estado dos módulos MFC.
Para obter um exemplo de como escrever, compilar e usar uma DLL MFC regular, consulte o exemplo DLLScreenCap. Para obter mais informações sobre DLLs MFC regulares que se vinculam dinamicamente ao MFC, consulte a seção intitulada "Convertendo DLLScreenCap para vincular dinamicamente com a DLL MFC" no resumo para o exemplo.
O que pretende fazer?
Sobre o que quer saber mais?
Os estados do módulo de uma DLL MFC regular dinamicamente ligada ao MFC
Utilizando DLLs de extensão MFC de Banco de Dados, OLE e Soquetes em DLLs MFC comuns