DLLs normais do MFC vinculadas estaticamente
Uma DLL regular vinculada estaticamente para o 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 de não-MFC. Como o nome descreve, esse tipo de DLL é construído usando a versão da biblioteca de vínculo estático do MFC. Funções geralmente são exportadas de uma DLL regular usando a interface c padrão. Para obter um exemplo de como gravar, criar e usar uma DLL regular, consulte o exemplo de DLLScreenCap.
Observe que o termo USRDLL não é mais usado na documentação do Visual C++. Uma DLL regular que esteja vinculada ao MFC tem as mesmas características como o antigo USRDLL.
Uma DLL regular, vinculada estaticamente para o MFC, tem os seguintes recursos:
O executável do cliente pode ser escrito em qualquer linguagem que suporta o uso de DLLs (C, C++, Pascal, Visual Basic e assim por diante); ele não tem de 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 DLLs normais do MFC vinculada estaticamente. Como do Visual C++ versão 4.0, o termo USRDLL é obsoleto.
Uma DLL regular, vinculada estaticamente para o MFC, tem os seguintes requisitos:
Esse tipo de DLL deve instanciar uma classe derivada de CWinApp.
Esse tipo de DLL usa a DllMain fornecido pelo MFC. Colocar todos os código de inicialização DLL específica no InitInstance código de função e o encerramento de membro na 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 que os arquivos de cabeçalho do MFC.
DLLs normais devem ter um CWinApp-derivado de classe e um único objeto dessa classe de aplicativo, como um aplicativo MFC. No entanto, o CWinApp o 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 aplicam a uma DLL, porque o aplicativo que detém a bomba de mensagem principal. Se a DLL abre as caixas de diálogo sem janela restrita ou tem uma quadro principal sua própria janela, bomba de mensagem principal do aplicativo deve chamar uma rotina exportada pela DLL que chama o CWinApp::PreTranslateMessage a função de membro de objeto de aplicativo a DLL.
Para obter um exemplo dessa função, consulte o exemplo de DLLScreenCap.
Símbolos geralmente são exportados de uma DLL regular usando a interface c padrão. A declaração de uma função exportada por uma DLL normal seria algo parecido com isto:
extern "C" __declspec(dllexport) MyExportedFunction( );
Todas as alocações de memória dentro de uma DLL regular devem permanecer na 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 pelo MFC
Se você precisar executar qualquer uma das opções acima ou precisa passar objetos derivados de MFC entre o executável de chamada e a DLL, você deve construir uma DLL de extensão.
É seguro passar ponteiros de memória que foram alocados pelas bibliotecas do tempo 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.
Uma DLL que esteja vinculada ao MFC também dinamicamente não é possível vincular às DLLs compartilhadas do MFC. Uma DLL que esteja vinculada ao MFC dinamicamente está vinculada a um aplicativo, assim como qualquer DLL; aplicativos vinculá-lo exatamente como qualquer outro tipo de DLL.
As bibliotecas de vínculo estático MFC padrão são nomeadas de acordo com a convenção descrita em As convenções de nomenclatura para DLLs de MFC. No entanto, com a versão 3.0 e posterior do MFC, não é necessário especificar manualmente para o vinculador a versão da biblioteca MFC que serem vinculados no. 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 adicionar diretivas /DEFAULTLIB, instruindo o vinculador para vincular-se em uma versão específica da biblioteca MFC.