Udostępnij przez


StoServe — omówienie

Cel

Głównym celem tego przykładu kodu jest użycie usług Structured Storage zgodnie z implementacją złożonych plików. Opisano użycie standardowych interfejsów IStorage i IStream. StoServe współpracuje z przykładem kodu StoClien, aby zilustrować wspólne wykorzystanie systemu magazynowania plików złożonych przez klienta i serwer.

Funkcjonalność

Przykład StoServe przedstawia obiekt COM COPaper, który praktycznie reprezentuje pusty arkusz papieru rysunkowego.

Obiekty COPaper udostępniają funkcje do rysowania na powierzchni papieru przy użyciu "atramentu" o określonym kolorze i szerokości. Funkcjonalność jest na zewnątrz podobna do przykładów samouczka "scribble" w wielu wersjach programu Microsoft Visual C++. Różnica w przykładach StoServe/StoClien polega na architekturze opartej głównie na technologii COM. Elektroniczne funkcje papieru do rysowania obiektów COPaper są dostępne dla klientów za pośrednictwem niestandardowego interfejsu IPaper. Aplikacja COPaper implementuje interfejs IPaper. Jasne rozróżnienie architektury jest zachowywane między klientem a serwerem. COPaper nie udostępnia graficznego interfejsu użytkownika (GUI). Projekt obiektu COPaper polega na kliencie w zakresie całego zachowania interfejsu graficznego użytkownika. COPaper dotyczy tylko przechwytywania i zapisywania danych atramentu rysowanego na serwerze.

Dane atramentowe, które są rysowane na powierzchni COPaper, można przechowywać i ładować z plików złożonych. Metody IPaper, Save i Load akceptują wskaźnik interfejsu IStorage . Narzędzie COPaper używa interfejsu IStorage dostarczonego przez klienta do przechowywania danych rysunkowych.

CoPaper jest przetrzymywany na serwerze przetwarzania i jest publicznie dostępny jako niestandardowy składnik COM. Podobnie jak w przypadku innych serwerów z tej serii samouczków, StoServe jest serwerem COM, który sam się rejestruje. Udostępnia on klientom typ obiektu COPaper jako składnik DllPaper przy użyciu rejestracji CLSID_DllPaper w rejestrze.

Podobnie jak w przypadku poprzedniego serwera CONSERVE funkcje obiektów, które można połączyć, są obsługiwane w programie COPaper. Interfejs IConnectionPointContainer jest uwidoczniony, a zaimplementowany jest odpowiedni punkt połączenia. W tym kontekście wychodzący niestandardowy interfejs IPaperSink jest zadeklarowany do użycia w wysyłaniu powiadomień do klienta.

Dwa niestandardowe interfejsy IPaper i IPaperSink są zadeklarowane w pliku IPAPER.H znajdującym się we wspólnym katalogu \INC. Identyfikatory GUID dla interfejsów i obiektów są zdefiniowane w PAPGUIDS.H znajdującym się w tym samym wspólnym katalogu include.

Obiekt CThreaded w APPUTIL jest używany przez StoServe w celu zapewnienia bezpieczeństwa wątków, podobnie jak w przykładzie FRESERVE. Obiekty COPaper pochodzą z klasy CThreaded i dziedziczą jej metody OwnThis i UnOwnThis. Te metody umożliwiają dostęp tylko jednemu wątkowi naraz do serwera StoServe oraz obiektów COPaper zarządzanych przez serwer.

COPaper COM, obiekt

Obiekt COPaper COM jest jedynym typem obiektu zarządzanym przez ten wewnątrzprocesowy serwer StoServe. CoPaper jest skonstruowany jako obiekt COM o możliwościach połączeniowych z implementacją standardowego interfejsu IConnectionPointContainer oraz implementacją niestandardowego interfejsu IPaper. CoPaper udostępnia interfejs IPaper, dzięki czemu klienci mogą wykonywać niewielki zestaw operacji na elektronicznych dokumentach na instancji COPaper. Podstawowe operacje obejmują rozpoczęcie sekwencji rysowania tuszem, rysowanie danych tuszu na powierzchni wirtualnego papieru COPaper oraz zakończenie sekwencji rysowania tuszem. W tym schemacie zakłada się, że klient jest aplikacją graficznego interfejsu użytkownika sterowaną myszą lub tabletem. Klient jest odpowiedzialny za konwersję ruchów myszy na żądania do COPaper, która zapisuje te żądania jako dane atramentu.

W programie COPaper są dwa poziomy zapisywania danych o tuszu. CoPaper zapisuje dane atramentu w tablicy opartej na pamięci RAM, która reprezentuje bieżący rysunek, i COPaper trwale zapisuje cały rysunek w pliku złożonym. Metody w interfejsie IPaper wykonują obie metody.

Ponieważ klient nie zarządza danymi papieru narysowanego, ale jest odpowiedzialny za renderowanie go jako obrazu na ekranie, implementacja IPaper w coPaper musi uwidocznić metodę, która umożliwia klientowi uzyskanie danych rysunkowych. W tym celu używana jest technologia obiektów do łączenia w programie COPaper. Punkt połączenia CONNPOINT_PAPERSINK jest implementowany przez COPaper, dzięki czemu klient może nawiązać połączenie z COPaper w celu odbierania danych o tuszu do rysowania. Klient najpierw wywołuje metodę IPaper::Redraw w obiekcie COPaper, aby zażądać wszystkich danych tuszu bieżącego rysunku. Implementacja COPaper Redraw następnie używa implementację klienta IPaperSink, aby przekazać dane do klienta.

Gdy użytkownik interaktywnie rysuje w aplikacji klienckiej, rysunek jest natychmiast wyświetlany na ekranie, a jednocześnie wysyłany do programu COPaper do zapisania. Gdy klient wymaga przemalowania ekranu, wywołuje metodę COPaper Redraw. Takie przemalowanie jest powszechne w aplikacjach. Na przykład przemalowanie występuje, gdy okno klienta jest nakładane przez inne okno aplikacji. Klient ma renderowanie mapy bitowej narysowanego obrazu, ale mapa bitowa jest łatwo utracona i często musi zostać przemalowana. Klient polega na COPaper na serwerze w celu uzyskania danych dotyczących tuszu wymaganych do poprawki malowania.

Jest to typowy podział pracy klienta/serwera. Jest to szczególnie odpowiednie, gdy istnieje wymóg, aby wielu klientów dzieliło się danymi. COPaper jest zakodowany, by to umożliwić. Używa obiektu APPUTIL CThreaded dla zapewnienia bezpieczeństwa wątków. Aplikacja, która może wykorzystać ten projekt, jest udostępnioną aplikacją tablicy, w której wielu klientów może współtworzyć często wyświetlany rysunek. Obsługa COM dla Rozproszonego COM (DCOM) wspiera tego typu użycie aplikacji roboczej w sieci. Aby uzyskać więcej informacji, zobacz wcześniejszy przykład REMCLIEN.

Bardziej skromnym zastosowaniem schematu klienta/serwera COPaper jest zintegrowanie zachowania obiektów implementowanych w różnych aplikacjach na tym samym komputerze. W takim przypadku klienci mogą być kontenerem ActiveX w oddzielnych aplikacjach, które współdzielą dane zarządzane przez ten sam obiekt. Te dane mogą nie być danymi rysunku atramentowego, które obsługuje składnik DllPaper. StoServe może służyć jako platforma początkowa dla składników programowania, które zarządzają innymi typami udostępnionych danych.

Informacje o pomocy technicznej

StoServe makefile rejestruje składnik StoServe DllPaper COM w rejestrze. Ten składnik musi być zarejestrowany, zanim StoServe będzie dostępny dla zewnętrznych klientów COM jako serwer dla tego składnika. Ta samorejestracja jest wykonywana przy użyciu narzędzia Register.exe wbudowanego w przykładzie REGISTER. Aby skompilować lub uruchomić StoServe, najpierw skompiluj przykład kodu REGISTER.

Aby uzyskać więcej informacji na temat konfigurowania systemu w celu kompilowania i testowania przykładów kodu w tej serii samouczków COM, zobacz How to Build Samples. Podany plik makefile (MAKEFILE) jest zgodny z programem Microsoft NMAKE. Aby utworzyć kompilację debugowania, wydaj polecenie NMAKE w oknie wiersza polecenia.

W przypadku wygodnego użycia w programie Microsoft Visual Studio plik projektu jest udostępniany dla każdego przykładu. Aby załadować projekt dla przykładu StoServe, możesz uruchomić program Visual Studio w wierszu poleceń w katalogu z przykładami w następujący sposób:

MSDEV STOSERVE.DSP

Możesz również kliknąć dwukrotnie plik Stoserve.dsp w Eksploratorze Windows, aby załadować przykładowy projekt do programu Visual Studio. W programie Visual Studio można przeglądać klasy języka C++ przykładowego źródła i ogólnie wykonywać inne operacje edytowania kompilacji-debugowania.

Notatka

W ramach zestawu Sdk (Platform Software Development Kit) kompilacja tych przykładów z poziomu programu Visual Studio wymaga odpowiedniego ustawienia ścieżek katalogu w programie Visual Studio. Aby uzyskać więcej informacji, zobacz Jak Budować Przykłady.