Compartilhar via


DLLs regulares vinculados dinamicamente ao MFC

Uma DLL normal vinculado dinamicamente ao MFC é uma DLL que usa o MFC internamente, as funções e exportadas na DLL podem ser chamadas pelos executáveis MFC ou por não MFC. Descreve como o nome, o tipo de DLL é construído usando a versão da biblioteca de vínculo dinâmico) nativa MFC (também conhecido como a versão compartilhada MFC). As funções são exportadas em geral de uma DLL normal usando a interface c padrão 2.0.

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

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Uma DLL normal, interligadas dinamicamente MFC ao tem os seguintes recursos:

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

  • O executável de cliente pode ser escritos em qualquer linguagem com suporte para o uso da DLL (2.0 C, C++, Pascal, Visual Basic, e assim por diante); não tem que ser um aplicativo MFC.

  • Ao contrário da DLL normal estaticamente vinculado, esse tipo de DLL está vinculado dinamicamente para a DLL MFC (também conhecido como o DLL compartilhado MFC).

  • A biblioteca de importação MFC vinculada a esse tipo de DLL é a mesma usada para dlls ou aplicativos de extensão usando o DLL MFC: MFCxx (D). Lib.

Uma DLL normal, interligadas dinamicamente MFC ao tem os seguintes requisitos:

  • Esses DLL são compilados com _AFXDLL definidas, exatamente como um executável que é vinculado dinamicamente para a DLL MFC. Mas _USRDLL também é definido, como uma DLL normal vinculada estaticamente MFC ao.

  • Esse tipo de DLL deve criar uma instância CWinApp- classe derivada.

  • Esse tipo de DLL usa DllMain MFC fornecido pelo. Coloque todo o código de inicialização DLL- específico na função de membro de InitInstance e o código de término em ExitInstance como em um aplicativo MFC normal.

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

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

Observe que o mecanismo de CWinApp::Run não se aplica a uma DLL, porque o aplicativo possuir a bomba principal da mensagem. Se o DLL abre caixas de diálogo modeless ou tem uma janela principal do quadro de sua escolha, a bomba principal da mensagem do seu aplicativo deve chamar uma rotina DLL- exportada que chama CWinApp::PreTranslateMessage.

Colocar qualquer inicialização DLL- específica na função de membro de CWinApp::InitInstance como em um aplicativo MFC normal. A função de membro de CWinApp::ExitInstance da sua classe derivada de CWinApp será chamada MFC forneceu a função de DllMain antes que o DLL seja descarregado.

Você deve distribuir as dlls compartilhados MFCx0.dll e Msvcr*0.dll (ou arquivos) semelhantes com seu aplicativo.

UMA DLL que seja vinculado dinamicamente ao MFC não pode também estaticamente vincular a MFC. O link dos aplicativos a DLL normais link dinamicamente ao MFC como qualquer outro DLL.

Os símbolos são exportados em geral de uma DLL normal usando a interface c padrão 2.0. A declaração de uma função exportou de uma DLL normal examina aparência:

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

Todas as alocações de memória dentro de uma DLL normal devem ficar dentro da DLL; a DLL não deve passar a receber ou do executável de chamada dos seguintes:

  • ponteiros para os objetos MFC

  • ponteiros à memória alocada por MFC

Se você precisar fazer alguma de anterior, ou se você precisa passar MFC- objetos derivados entre o executável de chamada e a DLL, você deve criar uma DLL da extensão.

É seguro passar os ponteiros à memória que foram atribuídos por bibliotecas de tempo de execução C entre um aplicativo e uma DLL somente se você faz uma cópia dos dados. Você não precisa redimensionar ou excluir esses ponteiros ou usá-los sem fazer uma cópia da memória.

Ao criar uma DLL normal que vincula dinamicamente ao MFC, você precisa usar a macro AFX_MANAGE_STATE para alternar corretamente o estado do módulo MFC. Isso é feito adicionando a seguinte linha de código ao início das funções exportadas da DLL:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

A macro de AFX_MANAGE_STATE não deve ser usado na DLL regulares que vinculam estaticamente ao MFC ou na DLL da extensão. Para obter mais informações, consulte Gerenciando os dados do estado dos módulos de MFC.

Para obter um exemplo de como escrever, para criar, e usar uma DLL normal, consulte DLLScreenCapde exemplo. Para obter mais informações sobre dlls regulares que vinculam dinamicamente ao MFC, consulte a seção denominada “convertendo DLLScreenCap dinamicamente para o link com o DLL MFC” no sumário para o exemplo.

O que você deseja fazer?

Que você deseja saber mais?

Consulte também

Conceitos

Tipos de DLLs