Partilhar via


Regulares DLLs vinculadas dinamicamente a MFC

Uma DLL regular dinamicamente vinculada ao MFC é uma DLL que usa o MFC internamente e as funções exportadas da dll podem ser chamadas por arquivos executáveis do MFC ou não-MFC.Como o nome descreve, esse tipo de DLL é criado usando a versão da biblioteca de vínculo dinâmico do MFC (também conhecido como a versão compartilhada do MFC).Funções geralmente são exportadas de uma DLL normal usando a interface c padrão.

Você deve adicionar o AFX_MANAGE_STATE macro no início de todas as funções exportadas em DLLs normais que vincular dinamicamente a MFC para definir o estado atual do módulo para o outro para a DLL.Isso é feito adicionando a seguinte linha de código para o início de funções exportadas da DLL:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Uma DLL regular, vinculada dinamicamente a MFC tem os seguintes recursos:

  • Este é um novo tipo de DLL introduzido pelo Visual C++ 4.0.

  • O cliente executável pode ser escrito em qualquer linguagem que suporta o uso de DLLs (C, C++, Pascal, Visual Basic e assim por diante); ele não precisa ser um aplicativo MFC.

  • Diferentemente a DLL regular vinculada estaticamente, esse tipo de DLL dinamicamente está vinculado a DLL do MFC (também conhecido como a DLL MFC compartilhada).

  • A biblioteca de importação MFC vinculada a esse tipo de DLL é o mesmo usado para aplicativos usando a DLL do MFC ou DLLs de extensão:. lib MFCxx (D).

Uma DLL regular, vinculada dinamicamente a MFC tem os seguintes requisitos:

  • Essas DLLs são compiladas com _AFXDLL definido, como um executável que está vinculado dinamicamente a DLL da MFC.Mas _USRDLL também é definida, assim como uma DLL regular vinculada estaticamente a MFC.

  • Esse tipo de DLL deve instanciar um CWinApp-classe derivada.

  • Esse tipo de DLL usa a DllMain fornecidos pelo MFC.Colocar todos os código de inicialização de DLL específicos na InitInstance código de função e terminação de membro em ExitInstance como em um aplicativo MFC normal.

Como esse tipo de DLL usa a versão de biblioteca de vínculo dinâmico do MFC, você deve definir explicitamente o estado atual do módulo do DLL.Para fazer isso, use o AFX_MANAGE_STATE macro no início de cada função exportada da DLL.

DLLs normais devem ter uma CWinApp-derivada de classe e um único objeto dessa classe de aplicativo como um aplicativo MFC.No entanto, o CWinApp objeto da DLL não tem uma bomba de mensagem principal, como faz o CWinApp o objeto de um aplicativo.

Observe que o CWinApp::Run mecanismo não se aplica a uma DLL, porque o aplicativo que detém a bomba de mensagem principal.Se sua DLL exibe caixas de diálogo sem janela restrita ou tiver uma janela de quadro principal de seu próprio, bomba de mensagem principal do aplicativo deve chamar uma rotina de exportado a DLL que chama CWinApp::PreTranslateMessage.

Coloque todos os DLL específica na CWinApp::InitInstance função de membro como em um aplicativo MFC normal.O CWinApp::ExitInstance função de membro de sua CWinApp classe derivada é chamado a partir do MFC fornecido DllMain funcionar antes que a DLL é descarregada.

Você deve distribuir MFCx0.dll de DLLs compartilhadas e Msvcr*0.dll (ou arquivos semelhantes) com seu aplicativo.

Uma DLL que está dinamicamente vinculada ao MFC também estaticamente não pode vincular a MFC.Vincular aplicativos a DLLs normais dinamicamente vinculado a MFC-assim como outro DLL.

Símbolos geralmente são exportados de uma DLL normal usando a interface c padrão.A declaração de uma função exportada de uma DLL regular pode ter esta aparência:

extern "C" __declspec(dllexport) MyExportedFunction( );

Todas as alocações de memória dentro de uma DLL regular devem permanecer dentro da DLL; a DLL não deve passar para ou receber do executável chamar qualquer um dos seguintes:

  • ponteiros para objetos do MFC

  • ponteiros para a memória alocada por MFC

Se você precisar fazer qualquer uma das opções acima, ou se você precisa passar objetos derivados MFC entre o executável de chamada e a DLL, você deve criar uma DLL de extensão.

É seguro passar ponteiros de memória que foram alocados por bibliotecas de tempo de execução c entre um aplicativo e uma DLL somente se você criar 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 regular que dinamicamente vinculado a MFC, você precisará usar a macro AFX_MANAGE_STATE para alternar o estado do módulo MFC corretamente.Isso é feito adicionando a seguinte linha de código para o início de funções exportadas da DLL:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

O AFX_MANAGE_STATE macro não deve ser usada em regulares DLLs vinculadas estaticamente a MFC ou DLLs de extensão.Para obter mais informações, consulte Gerenciamento de dados do estado do MFC módulos.

Para obter um exemplo de como gravar, criar e usar uma DLL regular, consulte exemplo de DLLScreenCap.Para obter mais informações sobre DLLs normais que vincular dinamicamente a MFC, consulte a seção intitulada "Convertendo DLLScreenCap para dinamicamente Link com MFC DLL" em resumo, para a amostra.

O que você deseja fazer?

O que você deseja saber mais sobre?

Consulte também

Conceitos

Tipos de DLLs