Compartilhar via


DLLs regulares dinamicamente vinculadas ao MFC

Uma DLL regular vinculada dinamicamente ao MFC é uma DLL que usa internamente o MFC e as funções exportadas na DLL podem ser chamadas por arquivos executáveis do MFC ou não MFC.sistema autônomo o nome descreve, esse tipo de DLL é construído usando-se a versão da biblioteca de vínculo dinâmico do MFC (também conhecido sistema autônomo a versão compartilhada do MFC).Funções geralmente são exportadas de uma DLL regular 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 conjunto o estado corrente do módulo para o outro para a 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( ))

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

  • Isso é 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); não é necessário ser um aplicativo MFC.

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

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

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

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

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

  • Esse tipo de DLL usa o DllMain fornecido pelo MFC. Colocar código de inicialização DLL específicos todos sistema autônomo o InitInstance código de função e a terminação membro no ExitInstance sistema autônomo 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 conjunto explicitamente o estado corrente do módulo do DLL.Para fazer isso, use o AFX_MANAGE_STATE macro no início de cada função exportada de DLL.

DLLs regulares devem ter um CWinApp-derivado de classe e um único objeto dessa classe de aplicativo, sistema autônomo um aplicativo MFC. No entanto, a CWinApp objeto da DLL não tem uma bomba de mensagem principal, sistema autônomo faz a CWinApp 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 possui uma quadro principal sua própria janela, bomba de mensagem principal do seu aplicativo deve chamar uma rotina exportados DLL que chama CWinApp::PreTranslateMessage.

Coloque todos sistema autônomo inicialização DLL específicos no CWinApp::InitInstance função de membro sistema autônomo em um aplicativo MFC normal. The CWinApp::ExitInstance função de membro de seu CWinApp classe derivada é chamada a partir do MFC fornecido DllMain função antes da DLL é descarregada.

É necessário distribuir MFCx0.dll DLLs compartilhadas e Msvcr*0.dll (ou arquivos similares) com o seu aplicativo.

Uma DLL está dinamicamente vinculada a MFC também estaticamente não é possível vincular ao MFC.Link de aplicativos para DLLs normais dinamicamente vinculados a MFC-lo exatamente como qualquer Outros DLL.

Símbolos geralmente são exportados de uma DLL regular usando a interface C padrão.A declaração de uma função exportada de uma DLL regular semelhante a este:

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

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

  • ponteiros para objetos do MFC

  • ponteiros para memória alocada pelo MFC

Se você precisa fazer qualquer uma das opções acima, ou se você precisar passar objetos derivados de 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 pelas bibliotecas de time de execução C entre um aplicativo e uma DLL somente se você fazer 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 vincula ao MFC, você precisará usar a macro AFX_MANAGE_STATE para comutador o estado do módulo MFC corretamente.Isso é concluído adicionando a linha de código a seguir ao início das funções exportadas da DLL:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

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

Para obter um exemplo de como escrever, compilação e usar uma DLL regular, consulte o exemplo 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 o MFC DLL" em Resumo da amostra.

O que você deseja fazer?

O que você deseja saber mais sobre?

Consulte também

Conceitos

Tipos de DLLs