Partilhar via


DLLs MFC regulares estaticamente vinculadas ao MFC

Uma DLL MFC regular estaticamente 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 link estático do MFC. As funções geralmente são exportadas de uma DLL MFC regular usando a interface C padrão. Para obter um exemplo de como escrever, compilar e usar uma DLL MFC regular, consulte o exemplo DLLScreenCap.

Observe que o termo USRDLL não é mais usado na documentação do Microsoft C++. Uma DLL MFC regular que está estaticamente ligada ao MFC tem as mesmas características que a USRDLL anterior.

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

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

  • A DLL pode vincular às mesmas bibliotecas de link estático MFC usadas por aplicativos. Não há mais uma versão separada das bibliotecas de links estáticos para DLLs.

  • Antes da versão 4.0 do MFC, USRDLLs forneciam o mesmo tipo de funcionalidade que as DLLs MFC regulares estaticamente vinculadas ao MFC. A partir do Visual C++ versão 4.0, o termo USRDLL está obsoleto.

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

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

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

  • Mesmo que o termo USRDLL seja obsoleto, você ainda deve definir "_USRDLL" na linha de comando do compilador. Esta definição determina quais declarações são extraídas dos arquivos de cabeçalho MFC.

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 abrir 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 pela DLL que, por sua vez, chamará a CWinApp::PreTranslateMessage função de membro do objeto de aplicativo da DLL.

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

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 teria 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 precisar passar objetos derivados do MFC entre o executável de chamada e a DLL, 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.

Uma DLL que está estaticamente vinculada ao MFC também não pode vincular dinamicamente às DLLs MFC compartilhadas. Uma DLL que está estaticamente vinculada ao MFC é dinamicamente vinculada a um aplicativo como qualquer outra DLL; os aplicativos se vinculam a ele como qualquer outra DLL.

As bibliotecas de link estático MFC padrão são nomeadas de acordo com a convenção descrita em Convenções de nomenclatura para DLLs MFC. No entanto, com MFC versão 3.0 e posterior, não é mais necessário especificar manualmente para o vinculador a versão da biblioteca MFC que você deseja vincular. Em vez disso, os arquivos de cabeçalho MFC determinam automaticamente a versão correta da biblioteca MFC para vincular com base em definições do pré-processador, como _DEBUG ou _UNICODE. Os arquivos de cabeçalho MFC adicionam diretivas /DEFAULTLIB instruindo o vinculador a vincular em uma versão específica da biblioteca MFC.

O que pretende fazer?

Sobre o que quer saber mais?

Ver também

Tipos de DLLs