Freigeben über


StoServe Übersicht

Zweck

Der Hauptfokus dieses Codebeispiels liegt auf der Verwendung von Strukturierten Speicherdiensten, die in der Implementierung zusammengesetzter Dateien bereitgestellt werden. Die Verwendung der Standardschnittstellen IStorage und IStream wird beschrieben. StoServe arbeitet mit dem StoClien-Codebeispiel , um die gemeinsame Verwendung von zusammengesetztem Dateispeicher durch Client und Server zu veranschaulichen.

Funktionalität

Im StoServe-Beispiel wird das COPaper COM-Objekt vorgestellt, das praktisch ein leeres Zeichenpapierblatt darstellt.

COPaper-Objekte machen eine Reihe von Features für das Freiformzeichnen auf der Papieroberfläche verfügbar, indem "Freihand" der angegebenen Farbe und Breite verwendet wird. Die Funktionalität ähnelt äußerlich den Beispielen des "Scribble"-Tutorials in vielen Versionen von Microsoft Visual C++. Der Unterschied in den StoServe/StoClien-Beispielen ist eine Architektur, die hauptsächlich auf COM-Technologie basiert. Die elektronischen Zeichenpapierfeatures von COPaper-Objekten stehen Clients über eine benutzerdefinierte IPaper-Schnittstelle zur Verfügung. COPaper implementiert die IPaper-Schnittstelle . Es wird ein klarer architektonischer Unterschied zwischen Client und Server beibehalten. CoPaper stellt keine grafische Benutzeroberfläche (GUI) bereit. Der Entwurf des COPaper-Objekts hängt für das gesamte GUI-Verhalten vom Client ab. COPaper kapselt nur die serverbasierte Erfassung und Speicherung der gezeichneten Freihanddaten.

Die Freihanddaten, die auf der COPaper-Oberfläche gezeichnet werden, können in zusammengesetzten Dateien gespeichert und aus diesen geladen werden. Die Methoden IPaper, Save und Load akzeptieren einen IStorage-Schnittstellenzeiger . COPaper verwendet diese vom Client bereitgestellte IStorage-Schnittstelle , um die Zeichnungsdaten zu speichern.

COPaper wird in einem Prozessserver untergebracht und als benutzerdefinierte COM-Komponente öffentlich zugänglich gemacht. Ähnlich wie bei anderen Servern in dieser Tutorialreihe ist StoServe ein selbst registrierende COM-Server. Es stellt den COPaper-Objekttyp für Clients als DllPaper-Komponente mithilfe einer CLSID_DllPaper Registrierung in der Registrierung zur Verfügung.

Wie auf dem vorherigen CONSERVE-Server werden in COPaper verbindungsbare Objektfeatures unterstützt. Die IConnectionPointContainer-Schnittstelle wird verfügbar gemacht, und ein entsprechender Verbindungspunkt wird implementiert. In diesem Kontext wird eine ausgehende benutzerdefinierte IPaperSink-Schnittstelle für die Verwendung beim Senden von Benachrichtigungen an den Client deklariert.

Die beiden benutzerdefinierten Schnittstellen IPaper und IPaperSink werden in IPAPER deklariert. H befindet sich im gemeinsamen gleichgeordneten Verzeichnis \INC. Die GUIDs für die Schnittstellen und Objekte sind in PAPGUIDS definiert. H befindet sich im gleichen gemeinsamen Include-Verzeichnis.

Die CThreaded-Einrichtung in APPUTIL wird von StoServe verwendet, um die Threadsicherheit zu erreichen, wie im FRESERVE-Beispiel. COPaper-Objekte werden von der CThreaded-Klasse abgeleitet und erben die Methoden OwnThis und UnOwnThis. Diese Methoden ermöglichen es nur einem Thread gleichzeitig, Zugriff auf den StoServe-Server und auf vom Server verwaltete COPaper-Objekte zu haben.

COPaper COM-Objekt

Das COPaper COM-Objekt ist der einzelne Objekttyp, der von diesem StoServe-Prozessserver verwaltet wird. COPaper wird als anschließbares COM-Objekt mit einer Implementierung der IConnectionPointContainer-Standardschnittstelle und einer Implementierung der benutzerdefinierten IPaper-Schnittstelle erstellt. COPaper macht die IPaper-Schnittstelle verfügbar, damit Clients eine kleine Gruppe von elektronischen Papiervorgängen auf einer instance von COPaper ausführen können. Die wichtigsten Vorgänge sind das Starten einer Freihandzeichnungssequenz, das Zeichnen der Freihanddaten auf der virtuellen COPaper-Papieroberfläche und das Beenden der Freihandzeichnungssequenz. In diesem Schema wird angenommen, dass der Client eine GUI-Anwendung ist, die von einer Maus oder einem Tablet-Gerät gesteuert wird. Der Client ist für die Übersetzung von Mausbewegungen in Anforderungen an COPaper verantwortlich, wodurch diese Anforderungen als Freihanddaten gespeichert werden.

Es gibt zwei Ebenen der Freihanddatenspeicherung in COPaper. COPaper speichert die Freihanddaten in einem RAM-basierten Array, das die aktuelle Zeichnung darstellt, und COPaper speichert dauerhaft eine gesamte Zeichnung in einer zusammengesetzten Datei. Methoden in der IPaper-Schnittstelle führen beides aus.

Da der Client die gezeichneten Papierdaten nicht verwaltet, sondern für das Rendern als Bild auf dem Bildschirm verantwortlich ist, muss die IPaper-Implementierung in COPaper eine Methode verfügbar machen, die es dem Client ermöglicht, die Zeichnungsdaten abzurufen. Hierzu wird die verbindebare Objekttechnologie in COPaper verwendet. Ein CONNPOINT_PAPERSINK Verbindungspunkt wird von COPaper implementiert, damit ein Client eine Verbindung mit COPaper herstellen kann, um die Freihanddaten zum Zeichnen zu empfangen. Der Client ruft zuerst die IPaper::Redraw-Methode für das COPaper-Objekt auf, um alle Freihanddaten der aktuellen Zeichnung anzufordern. Die COPaper-Implementierung von Redraw verwendet dann die Clientimplementierung von IPaperSink , um die Daten an den Client zu übergeben.

Wenn der Benutzer den Client interaktiv zeichnet, zeichnet er die Daten sofort auf den Bildschirm und sendet sie zum Speichern an COPaper. Wenn der Client eine Neubemalung des Bildschirms erfordert, ruft er die COPaper Redraw-Methode auf. Eine solche Neulackierung ist in Anwendungen üblich. Beispielsweise erfolgt die Neulackierung, wenn das Clientfenster von einem anderen Anwendungsfenster überlagert wird. Der Client verfügt über ein Bitmaprendering des gezeichneten Bilds, aber die Bitmap geht leicht verloren und muss häufig neu gestrichen werden. Der Client verlässt sich auf COPaper auf dem Server für die Freihanddaten, die für die Neulackierung erforderlich sind.

Dies ist eine gängige Client/Server-Arbeitsteilung. Dies ist besonders geeignet, wenn mehrere Clients die Daten freigeben müssen. COPaper ist codiert, um dies zu aktivieren. Es verwendet die APPUTIL CThreaded-Funktion, um threadsicherheit zu erreichen. Eine Anwendung, die diesen Entwurf möglicherweise ausnutzen kann, ist eine freigegebene Whiteboardanwendung, bei der mehrere Clients zu einer häufig angezeigten Zeichnung beitragen können. Die COM-Unterstützung für Distributed COM (DCOM) unterstützt diese Art der Verwendung von Arbeitsgruppenanwendungen im gesamten Netzwerk. Weitere Informationen finden Sie im vorherigen REMCLIEN-Beispiel.

Eine bescheidenere Verwendung des COPaper-Client/Server-Schemas besteht darin, das Verhalten für Objekte zu integrieren, die in verschiedenen Anwendungen auf demselben Computer implementiert sind. In diesem Fall kann es sich bei den Clients um einen ActiveX-Container in separaten Anwendungen handeln, die von demselben Objekt verwaltete Daten gemeinsam nutzen. Bei diesen Daten handelt es sich möglicherweise nicht um die Freihandzeichnungsdaten, die die DllPaper-Komponente unterstützt. StoServe kann als Startframework für die Programmierung von Komponenten verwendet werden, die andere Arten von freigegebenen Daten verwalten.

Supportinformationen

Das StoServe-Makefile registriert die StoServe DllPaper COM-Komponente in der Registrierung. Diese Komponente muss registriert werden, bevor StoServe für externe COM-Clients als Server für diese Komponente verfügbar ist. Diese Selbstregistrierung erfolgt mithilfe des in das REGISTER-Beispiel integrierten Register.exe-Hilfsprogramms. Um StoServe zu erstellen oder auszuführen, erstellen Sie zuerst das REGISTER-Codebeispiel.

Weitere Informationen zum Einrichten Ihres Systems zum Erstellen und Testen der Codebeispiele in dieser COM-Tutorialreihe finden Sie unter Erstellen von Beispielen. Das bereitgestellte Makefile (MAKEFILE) ist Microsoft NMAKE-kompatibel. Um einen Debugbuild zu erstellen, geben Sie den NMAKE-Befehl im Eingabeaufforderungsfenster aus.

Zur komfortablen Verwendung in Microsoft Visual Studio wird für jedes Beispiel eine Projektdatei bereitgestellt. Um das Projekt für das StoServe-Beispiel zu laden, können Sie Visual Studio an der Eingabeaufforderung im Beispielverzeichnis wie folgt ausführen:

MSDEV STOSERVE. DSP

Sie können auch auf die Datei Stoserve.dsp in Windows Explorer doppelklicken, um ein Beispielprojekt in Visual Studio zu laden. In Visual Studio können Sie die C++-Klassen der Beispielquelle durchsuchen und im Allgemeinen die anderen Edit-Compile-Debug-Vorgänge ausführen.

Hinweis

Als Teil des Platform Software Development Kit (SDK) erfordert die Kompilierung dieser Beispiele in Visual Studio die richtige Einstellung der Verzeichnispfade in Visual Studio. Weitere Informationen finden Sie unter Erstellen von Beispielen.