Compartilhar via


Exemplo do DLLScreenCap: Demonstra que uma DLL regular ou estaticamente ou dinamicamente links ao MFC

O exemplo DLLScreenCap mostra uma versão da biblioteca de vínculo dinâmico (DLL) de uma ferramenta de capturar de tela.DLLScreenCap substitui amostra DLLTRACE, que é obsoleta.DLLTRACE foi introduzido no MFC versão 1.0 para ilustrar como escrever uma DLL é estaticamente vinculada à biblioteca MFC.DLLScreenCap fornece uma interface de programa em C para o aplicativo baseado no Microsoft Windows ao qual está dinamicamente vinculada.Uma DLL que está estaticamente vinculada à biblioteca MFC com êxito não é possível exportar funções de membro de quaisquer classes derivadas de classes do MFC.

A técnica de vinculação estaticamente de uma DLL para a biblioteca MFC é discutida em Observação técnica 11: Usando o MFC sistema autônomo parte de um DLL.O exemplo DLLScreenCap pode também ser vinculado a MFC dinamicamente, sem ser uma DLL de extensão.Antes de decidir implementar uma DLL personalizada vincula estaticamente a MFC, considere a implementação-la sistema autônomo uma extensão do MFC DLL, conforme explicado em Observação técnica 33: Versão de DLL da MFC e sistema autônomo ilustrado a DLLHUSK amostra.

Uma DLL de extensão não está vinculada à biblioteca MFC precisa ter um CWinApp-derivado de classe e um único objeto dessa classe de aplicativo, sistema autônomo um aplicativo MFC executável. The CWinApp objeto da DLL, no entanto, não tem uma bomba de mensagem principal, sistema autônomo faz a CWinApp objeto de um aplicativo. Se a DLL abre caixas de diálogo sem janela restrita ou possui uma quadro principal sua própria janela, bomba de mensagem principal do aplicativo deve chamar uma rotina exportada pela DLL, que, por sua vez chamadas a CWinApp::PreTranslateMessage função de membro de objeto de aplicativo da DLL. Isso é ilustrado a FilterDllMsg função exportada por DLLScreenCap.dll.

ScreenCapApi.h mostra que uma forma de fornecer que uma interface de DLL para aplicativos cliente é declarar funções com extern"C". O uso de extern"C" tem várias vantagens. Primeiro, faz sua DLL utilizável por aplicativos clientes não-C++.Segundo, ele reduz a sobrecarga DLL, porque decoração de nome de C++ não será aplicada o nome exportado.Em terceiro lugar, ele torna mais fácil adicionar explicitamente um arquivo .def (para exportar por ordinal), sem precisar se preocupar com C++ decoração de nome.

Observação de segurança:

Este código de exemplo é fornecido para ilustrar um conceito e não deve ser usado em aplicativos ou sites da Web, pois ele não pode ilustrar sistema autônomo práticas de codificação mais seguras.Microsoft sistema autônomo sumes nenhuma responsabilidade por danos incidentais ou conseqüenciais deve o código de exemplo ser usado para fins diferentes de sistema autônomo se destina.

Para obter exemplos e instruções para instalá-los:

  • Sobre o Visual Studio Ajuda menu, clicar Exemplos.

    Para obter mais informações, consulte Localizando arquivos de exemplo.

  • A versão mais recente e a lista completa das Exemplos está disponível online a partir de O Visual Studio 2008 Exemplos página.

  • Você também pode localizar exemplos no disco rígido do seu computador.Por padrão, exemplos e um arquivo Leiame são copiados para uma pasta sob \programa Files\Visual Studio 9.0\Samples\.Para edições Express do Visual Studio, todos os exemplos estão localizados online.

Criando e executando o exemplo

O exemplo DLLScreenCap consiste em dois projetos: DLLScreenCap, um projeto DLL e ScreenCap, um projeto EXE que chama a DLL.

compilação ing ScreenCap da solução fornecida serão automaticamente compilação DLLScreenCap e copie a DLL na ScreenCap saída do diretório.

Observação:   Como esse exemplo usa uma etapa de compilação personalizada para copiar um arquivo, você não deve em em aberto a solução usando um caminho UNC; colocar os arquivos de exemplo em um diretório com uma letra da unidade.

Para criar e executar a amostra DLLScreenCap

  1. Abra a solução DllScreenCap.sln.

  2. No gerenciador de soluções, clicar com o botão direito do mouse na pasta de projeto ScreenCap e clique em conjunto sistema autônomo projeto de inicialização no menu de atalho.

  3. Sobre o Compilação menu, clicar Compilação.

  4. No menu Debug, clique em Start Without Debugging.

A janela ScreenCap exibe a última tela capturada após ser dimensionado para o dimensionar da janela.clicar Configurar a capturar de tela on the Arquivo menu.Isso abre uma caixa de diálogo para especificar se deseja capturar a tela ou a janela ativo, além de um caminho para onde o arquivo capturado deve ser salvo.clicar capturar de tela para criar um arquivo capturado e atualizar a exibição da janela de cliente.

Convertendo DLLScreenCap para vincular dinamicamente com a DLL do MFC

DLLScreenCap demonstra como criar uma DLL normal com uma função exportada que pode ser chamada para exibir uma caixa de diálogo modal.Em versões anteriores do Visual C++, isso era a única opção disponível para DLLs normais.Esses tipos de DLLs eram conhecidos anteriormente sistema autônomo _USRDLLs.

Agora, é possível que uma DLL regular para usar MFC da DLL compartilhada MFCx0.Por causa do potencial para reduzir o dimensionar da compilação, convém criar o exemplo DLLScreenCap usando a DLL do MFC compartilhada.A biblioteca compartilhada de suporte na DLLScreenCap.dll reduzirá o dimensionar de uma DLL de criação de versão de mais de 100 K para cerca de 16 K e reduzirá o dimensionar da compilação de depurar de mais de 1 megabyte para 100 K.Para oferecer suporte a vinculação dinamicamente em DLLScreenCap, use a macro AFX_MANAGE_STATE para comutador o estado do módulo MFC global corretamente.

Para verificar se DLLScreenCap pode ser usado em uma biblioteca compartilhada

  1. No gerenciador de soluções, clicar com o botão direito do mouse no nó do projeto ScreenCap e clique em Propriedades no menu de atalho.

    The Páginas de propriedades caixa de diálogo é exibida.

  2. From a Configuração suspensa menu, selecionar Várias configurações.See Definindo propriedades do Visual C++ projeto para obter mais informações sobre o propriedade Páginas caixa de diálogo.

  3. selecionar o Versão and Depurar cria para alterar suas configurações.

  4. No Página de propriedades Geral para o projeto, verifique o Uso do MFC propriedade para usar MFC em uma propriedade DLL compartilhada é verificada.

  5. Verifique se que a linha de código a seguir é no início de cada função exportada da DLL (consulte Gerenciamento de dados do estado dos módulos do MFC para obter mais informações):

    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    

Por exemplo, DllScreenCap.dll exporta quatro funções:

  • CaptureScreen

  • ConfigureCapture

  • ProcessDLLIdle

  • FilterDLLMsg

FilterDLLMsg deve ter esta aparência no formulário convertido:

BOOL WINAPI FilterDllMsg(LPMSG lpMsg)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState())
   TRY
   {
       return AfxGetApp()->PreTranslateMessage(lpMsg);
   }
   END_TRY
return FALSE;
}

Palavras-chave

Este exemplo demonstra as seguintes palavras-chave:

CDialog::DoModal, CWinApp::InitInstance, CWinApp::OnIdle, CWinApp::PreTranslateMessage, CWnd::DoDataExchange, CWnd::GetClientRect, CWnd::OnPaint, ShowWindow, UpdateWindow, CImage, AFX_MANAGE_STATE, AfxGetStaticModuleState, CWnd::GetDesktopWindow, CWnd::GetActiveWindow, CImage::criar, CImageDC, CImage::salvar, SHBrowseForFolder, CImage::Load, CDC::SetStretchBltMode, CImage::StretchBlt, CWnd::OnEraseBkgnd, CWindowDC

Consulte também

Outros recursos

Exemplos do MFC