Compartilhar via


Regulares DLLs vinculadas estaticamente a MFC

Uma DLL regular vinculada estaticamente a 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 de biblioteca de vínculo estático do MFC.Funções geralmente são exportadas de uma DLL normal usando a interface c padrão.Para obter um exemplo de como gravar, criar e usar uma DLL regular, consulte exemplo de DLLScreenCap.

Observe que o termo USRDLL não é mais usado na documentação do Visual C++.Uma DLL regular vinculada estaticamente a MFC tem as mesmas características como o USRDLL anterior.

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

  • 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.

  • A DLL pode vincular as bibliotecas de vínculo estático MFC mesmas usadas por aplicativos.Não é uma versão separada das bibliotecas de vínculo estático para DLLs.

  • Antes da versão 4.0 do MFC, o USRDLLs fornecido o mesmo tipo de funcionalidade como regulares DLLs vinculadas estaticamente a MFC.Como do Visual C++ versão 4.0, o termo USRDLL é obsoleto.

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

  • Esse tipo de DLL deve instanciar uma classe derivada de CWinApp.

  • 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.

  • Embora o termo USRDLL é obsoleto, você ainda deve definir "_USRDLL" na linha de comando do compilador.Essa definição determina quais declarações é retirada do arquivos de cabeçalho MFC.

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 a DLL abre 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 exportada pela DLL chama o CWinApp::PreTranslateMessage função de membro do objeto de aplicativo da DLL.

Para obter um exemplo desta função, consulte exemplo DLLScreenCap.

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 seria algo assim:

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 dos acima ou 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.

Uma DLL que está estaticamente vinculada ao MFC também dinamicamente não pode vincular as DLLs de MFC compartilhada.Uma DLL que está estaticamente vinculada ao MFC dinamicamente está vinculada a um aplicativo assim como qualquer DLL; aplicativos vinculá-lo exatamente como qualquer outra DLL.

Bibliotecas de vínculo estático MFC padrão são nomeadas de acordo com a convenção descrita em Convenções de nomeação para as DLLs de MFC.No entanto, com MFC versão 3.0 e posterior, não é necessário especificar manualmente para o vinculador a versão da biblioteca MFC em que ser vinculado.Em vez disso, os arquivos de cabeçalho do MFC determinam automaticamente a versão correta da biblioteca MFC para vincular com base no pré-processador define, como Debug ou Unicode.Os arquivos de cabeçalho do MFC adicione /DEFAULTLIB diretivas instruindo o vinculador para vincular em uma versão específica da biblioteca MFC.

O que você deseja fazer?

O que você deseja saber mais sobre?

Consulte também

Conceitos

Tipos de DLLs