Partilhar via


Exemplo do DCOM: Demonstra a chamada remotamente um objeto COM

O exemplo DCOM demonstra como chamar um objeto COM implementada em um serviço do Windows de vários clientes em execução em máquinas diferentes.É composto de três partes:

  • DrawServ — Serviço de Windows que implementa o objeto COM.

  • ATLDraw — Cliente que se conecta a objeto COM DrawServ.

  • DrawCtl — uma versão de controle do ATLDraw.

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 este exemplo funcione, todos os computadores devem estar executando o Windows 2000 ou posterior.

Para compilação e executar a amostra

  1. em aberto DCOM.sln a solução.

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

  3. Copie DrawServ.exe e ATLDraw.exe ou DrawCtl.dll para cada computador no qual você deseja executar a amostra.Registrar o servidor em cada computador executando DrawServ com o argumento de linha de comando /RegServer ou -RegServer (isso é não diferencia maiúsculas de minúsculas). Por exemplo:

    C:\ATL> DrawServ /RegServer 
    

    (ATL.DLL devem ser registrados para este trabalho.) Você deve copiar o servidor para cada cliente para registrar o CLSID para o servidor e a biblioteca de tipos de servidor em cada cliente.

  4. Inicie o serviço no servidor usando o ícone Serviços no painel de controle.

  5. Usando o DCOMCNFG utility em cada cliente (executá-lo a partir de uma linha de comando), selecionar as propriedades do DrawServ Classe.Na guia local, selecionar Executar o aplicativo no computador seguinte.Digite o nome do computador em que está executando o objeto de servidor.

  6. Execute o ATLDraw e selecionar servidor conectar no menu de cada cliente.Para desenhar na janela do cliente, pressionando botão do mouse esquerdo do mouse e arrastando uma linha.A linha desenhada deve aparecer em cada cliente conectado ao mesmo servidor.Você também pode usar o Modo de exibição/cores opção do menu para alterar a cor para cada cliente.

O exemplo DrawServ não registrará corretamente quando o seu caminho contiver espaços.Uma solução para esse problema é edição o arquivo .rgs correspondente e adicionar aspas simples ao redor de todas as ocorrências de %MODULE%. Por exemplo, altere uma linha que contém o seguinte:

InprocServer32 = s %MODULE%

Para o seguinte:

InprocServer32 = s '%MODULE%'

Palavras-chave

Este exemplo utiliza as seguintes palavras-chave:

AfxMessageBox; ASSERT_VALID; ATLASSERT; AtlUnadvise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_INTERFACE_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::Unlock; CComModule::UnregisterServer; CComModule::UpdateRegistryFromResource; CComObjectRoot; CDocument::OnNewDocument; CFrameWnd::AssertValid; CFrameWnd::DockControlBar; CFrameWnd::Dump; CFrameWnd::EnableDocking; CFrameWnd::OnCreate; CFrameWnd::PreCreateWindow; CloseServiceHandle; CoCreateInstance; CoCreateInstanceEx; CoInitialize; CoInitializeSecurity; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COM_INTERFACE_ENTRY_IMPL_IID; COM_INTERFACE_ENTRY2; CONNECTION_POINT_ENTRY; ConnectSink; ControlService; CoUninitialize; CProxyIDrawServ; CreatePen; CreateService; CStatusBar::SetIndicators; CToolBar::EnableDocking; CToolBar::LoadToolBar; CView::DoPreparePrinting; CView::OnLButtonUp(nFlags, point);; CView::PreCreateWindow; CWinApp::AddDocTemplate; CWinApp::LoadStdProfileSettings; CWinApp::ParseCommandLine; CWinApp::ProcessShellCommand; CWindow::SetCapture; DECLARE_GET_CONTROLLING_UNKNOWN; DECLARE_REGISTRY_RESOURCEID; DeleteObject; DeregisterEventSource; DisableThreadLibraryCalls; Disconnect; DisconnectSink; END_COM_MAP; END_CONNECTION_POINT_MAP; END_INTERFACE_MAP; END_OBJECT_MAP; GetModuleFileName; IConnectionPointContainerImpl; IDataObjectImpl; IDispatchImpl; IMPLEMENT_DYNCREATE; Install; INTERFACE_PART; IObjectSafetyImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISupportErrorInfo; IViewObjectExImpl; IViewObjectExImpl::Draw; LineTo; LoadString; LogEvent; MESSAGE_HANDLER; MessageBox; MoveToEx; OBJECT_ENTRY; OffsetRect; OpenSCManager; OpenService; PostThreadMessage; PtInRect; QueryInterface; RegisterEventSource; ReleaseDC; ReportEvent; SelectObject; SetCapture; SetServiceStatus; SetWindowOrgEx; StartServiceCtrlDispatcher; Uninstall

Consulte também

Outros recursos

Exemplos do ATL