Compartilhar via


Exemplo do MFCATL: Usa objetos COM de ATL em um servidor do MFC

O exemplo MFCATL mostra como os objetos COM ATL podem ser usados em um servidor EXE do MFC.

O servidor permite a criação de dois objetos: ObjectOne (implementado no MFC e oferecer suporte a um Dispinterface) and ObjectTwo (implementada na ATL e com suporte para uma interface dupla).

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

Para compilação e executar a amostra

  1. em aberto mfcatl.sln de arquivo da solução.

  2. From a Compilação menu, clicar Criar solução.

  3. From a Depurar menu, clicar Iniciar sem depuração.Isso executará mfcatl.exe servidor autônomo e irá registrá-lo.

  4. Mfcatl.htm abrir arquivo no seu navegador da Web e clicar nos botões para telefonar em objetos apropriados.Você pode chamar cada objeto individualmente ou ambos ao mesmo time.

Comentários de conversão

Originalmente, os dois objetos MFCATL foram implementados no MFC.Ambos foram derivados de CCmdTarget. ObjectTwo foi reimplementados por meio de ATL seguindo estas etapas:

  1. Inclua os arquivos de cabeçalho ATL (atlbase.h e Atlcom.h) em Premfcat.h.

  2. Inclua Atlimpl.cpp Premfcat.cpp.

  3. Adicionar um CComModule-classe derivada para Prefcat.h (semelhante a PAGER Exemplo EXE).A classe derivada implementa o Lock e Unlock métodos para contagens de bloquear direta ao MFC, chamando AfxOleLockApp e AfxOleUnlockApp.

  4. Adicione um emparelhar de macro do MAP de objeto (BEGIN_OBJECT_MAP/END_OBJECT_MAP) em Mfcatl.cpp e adicionar uma instância estática da classe de módulo chamada _Module.

  5. De telefonar**_Module.Init** and Term de InitInstance e ExitInstance.

  6. Adicione o typelib sistema autônomo um recurso.

  7. De telefonar**_Module.RegisterServer(TRUE)** from InitInstance para coincidir com a telefonar do MFC COleObjectFactory::UpdateRegistryAll.

  8. De telefonar**_Module.RegisterClassObjects CLSCTX_LOCAL_SERVER (**, REGCLS_MULTIPLEUSE) para coincidir com o REGCLS_MULTIPLEUSE de criações de classes do MFC, implicitamente sistema autônomo concluído com o IMPLEMENT_OLECREATE macro.

  9. ReimplementarObjectTwo ATL seguindo estas etapas:

    • Alterar o arquivo ODL de Dispinterface à interface dupla.

    • Ter a compilação ODL gerar um arquivo de cabeçalho (Interf.h) precisa ATL.

    • Reescreva .h e .cpp arquivos (a maneira mais rápida é executar o ATL assistentes e copiar, colar e renomear o código gerado automaticamente no lugar do código original MFC).

    • Adicionar um OBJECT_ENTRY (CLSID_ObjectTwo, CObjectTwo) para o MAP de objeto ATL.

As etapas de conversão adicionais (não abordadas aqui) podem incluir:

  • Portar arquivo ODL para formato IDL.

  • Adicionando suporte a -RegServer and -UnregServer argumentos da linha de comando.

Palavras-chave

Este exemplo utiliza as seguintes palavras-chave:

AfxMessageBox AfxOleInit AfxOleLockApp; AfxOleUnlockApp; declaração; BEGIN_COM_MAP; CCmdTarget; CCmdTarget::OnFinalRelease; CComCoClass; CComModule; CComModule::GetLockCount; CComModule::bloquear; CComModule::Unlock; CComObjectRoot; CDialog; CMenu::AppendMenu; COleObjectFactory::RegisterAll; COleObjectFactory::UpdateRegistryAll; COM_INTERFACE_ENTRY; CString::IsEmpty; CString::LoadString; CWindow::GetSystemMenu; DECLARE_DYNCREATE; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY; DestroyWindow; EnableAutomation; GetClientRect; GetSystemMetrics; IDispatchImpl; PostMessage; SendMessage; SetIcon; ShowWindow; SysAllocString

Consulte também

Outros recursos

Exemplos do ATL