Freigeben über


DCOM-Beispiel: Veranschaulicht, Remote Aufrufen eines COM-Objekts

Das DCOM-Beispiel veranschaulicht, wie ein COM-Objekt in einer Windows-Dienst von mehreren, auf verschiedenen Computern laufenden Clients aus implementiert aufgerufen. Es besteht aus drei Teilen:

  • DrawServ – Der Windows-Dienst, der das COM-Objekt implementiert.

  • ATLDraw – Der Client, auf das DrawServ COM-Objekt eine Verbindung herstellt.

  • DrawCtl – Eine Steuerelementversion von ATLDraw.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

Für dieses Beispiel funktioniert müssen auf allen Computern Windows 2000 oder höher ausgeführt werden.

So erstellen und im Beispiel führen

  1. Öffnen Sie die Projektmappe DCOM.sln.

  2. Erstellen Sie aus der Menü, und klicken Sie auf Projektmappe.

  3. Kopieren Sie DrawServ.exe und ATLDraw.exe oder DrawCtl.dll auf jeder Computer, die auf dem Sie das Beispiel ausführen möchten. Registrieren Sie den Server auf jedem Computer, indem Sie DrawServ mit dem Befehlszeilenargument /RegServer oder -RegServer (Dies ist keine Unterscheidung nach Groß-/Kleinschreibung) ausführen. Beispiel:

    C:\ATL> DrawServ /RegServer 
    

    (Dazu muss ATL.dll registriert sein.) Sie müssen den Server für jeden Client die CLSID für den Server und Server-Typ-Bibliothek auf jedem Client registrieren kopieren.

  4. Starten Sie den Dienst auf dem Server mithilfe des Symbols Dienste in der Systemsteuerung.

  5. Wählen Sie mithilfe der DCOMCNFG-Dienstprogramm auf jedem Client (von einer Befehlszeile aus ausführen), die Eigenschaften der DrawServ Klasse. Wählen Sie auf der Registerkarte Speicherort Anwendung wird ausgeführt auf folgenden Computer . Geben Sie den Namen des Computers, auf dem das Serverobjekt ausgeführt werden.

  6. Führen Sie ATLDraw und auf jedem Client im Menü Wählen Sie Server verbinden. Zeichnen Sie auf das Clientfenster, indem Sie die linke Maustaste gedrückt halten und eine Linie ziehen. Die gezeichnete Linie sollte auf jedem Client angezeigt werden, die mit dem gleichen Server verbunden ist. Sie können auch der Menüoption für Ansicht-Farbe verwenden, um die Farbe für jeden Client ändern.

DrawServ-Beispiel wird nicht korrekt registriert bei dessen Pfad Leerzeichen enthält. Eine Lösung dieses Problems ist die entsprechende RGS-Datei bearbeiten und alle Vorkommen von %MODULE% in einfache Anführungszeichen. Ändern Sie beispielsweise eine Zeile mit der folgenden:

InprocServer32 = s %MODULE%

Die folgende:

InprocServer32 = s '%MODULE%'

Schlüsselwörter

In diesem Beispiel werden die folgenden Schlüsselwörter verwendet:

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; 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

Siehe auch

Weitere Ressourcen

ATL-Beispiele