Vue d’ensemble de StoServe
Objectif
L’objectif principal de cet exemple de code est l’utilisation des services de stockage structuré fournis dans l’implémentation de fichiers composés. L’utilisation des interfaces IStorage et IStream standard est décrite. StoServe utilise l’exemple de code StoClien pour illustrer l’utilisation conjointe du stockage de fichiers composés par le client et le serveur.
Fonctionnalités
L’exemple StoServe présente l’objet COM COPaper, qui représente pratiquement une feuille vierge de papier à dessin.
Les objets COPaper exposent un ensemble de caractéristiques pour le dessin de forme libre sur la surface du papier à l’aide de « l’encre » de la couleur et de la largeur spécifiées. La fonctionnalité est extérieurement similaire aux exemples de didacticiel « gribouiller » dans de nombreuses versions de Microsoft Visual C++. La différence dans les exemples StoServe/StoClien est une architecture basée principalement sur la technologie COM. Les fonctionnalités de papier de dessin électronique des objets COPaper sont disponibles pour les clients via une interface IPaper personnalisée. COPaper implémente l’interface IPaper . Une distinction architecturale claire est conservée entre le client et le serveur. Aucune interface utilisateur graphique n’est fournie par COPaper. La conception de l’objet COPaper s’appuie sur le client pour tous les comportements de l’interface utilisateur graphique. COPaper encapsule uniquement la capture basée sur le serveur et le stockage des données manuscrites dessinées.
Les données manuscrites qui sont dessinées sur la surface COPaper peuvent être stockées et chargées à partir de fichiers composés. Les méthodes IPaper, Save et Load acceptent un pointeur d’interface IStorage . COPaper utilise cette interface IStorage fournie par le client pour stocker les données de dessin.
COPaper est hébergé dans un serveur in-process et est mis à la disposition du public en tant que composant COM personnalisé. À l’instar des autres serveurs de cette série de tutoriels, StoServe est un serveur COM auto-inscrit. Il met le type d’objet COPaper à la disposition des clients en tant que composant DllPaper à l’aide d’une inscription CLSID_DllPaper dans le Registre.
Comme dans le serveur CONSERVE précédent, les fonctionnalités d’objet connectables sont prises en charge dans COPaper. L’interface IConnectionPointContainer est exposée et un point de connexion approprié est implémenté. Dans ce contexte, une interface IPaperSink personnalisée sortante est déclarée pour être utilisée dans l’envoi de notifications au client.
Les deux interfaces personnalisées IPaper et IPaperSink sont déclarées dans IPAPER. H situé dans le répertoire \INC frère commun. Les GUID des interfaces et des objets sont définis dans PAPGUIDS. H situé dans ce même répertoire include commun.
L’installation CThreaded dans APPUTIL est utilisée par StoServe pour assurer la sécurité des threads, comme dans l’exemple FRESERVE. Les objets COPaper sont dérivés de la classe CThreaded et héritent de ses méthodes OwnThis et UnOwnThis. Ces méthodes permettent à un seul thread à la fois d’avoir accès au serveur StoServe et aux objets COPaper gérés par le serveur.
OBJET COM COPaper
L’objet COM COPaper est le type d’objet unique géré par ce serveur in-process StoServe . COPaper est construit en tant qu’objet COM connectable avec une implémentation de l’interface IConnectionPointContainer standard et une implémentation de l’interface IPaper personnalisée. COPaper expose l’interface IPaper afin que les clients puissent effectuer un petit ensemble d’opérations électroniques sur papier sur un instance de COPaper. Les opérations essentielles sont le démarrage d’une séquence de dessins manuscrits, le dessin des données manuscrites sur la surface de papier virtuelle COPaper et la fin de la séquence de dessin manuscrite. Dans ce schéma, le client est supposé être une application gui pilotée par une souris ou une tablette. Le client est chargé de traduire les mouvements de la souris en requêtes adressées à COPaper, qui enregistre ces demandes en tant que données manuscrites.
Il existe deux niveaux d’enregistrement des données manuscrites dans COPaper. COPaper enregistre les données manuscrites dans un tableau basé sur ram qui représente le dessin actuel, et COPaper enregistre de manière persistante un dessin entier dans un fichier composé. Les méthodes de l’interface IPaper effectuent les deux.
Étant donné que le client ne gère pas les données de papier dessiné, mais qu’il est responsable du rendu sous forme d’image à l’écran, l’implémentation IPaper dans COPaper doit exposer une méthode qui permet au client d’obtenir les données de dessin. La technologie d’objet connectable dans COPaper est utilisée à cet effet. Un point de connexion CONNPOINT_PAPERSINK est implémenté par COPaper afin qu’un client puisse se connecter à COPaper pour recevoir les données manuscrites pour le dessin. Le client appelle d’abord la méthode IPaper::Redraw sur l’objet COPaper pour demander toutes les données manuscrites du dessin actuel. L’implémentation COPaper de Redraw utilise ensuite l’implémentation cliente d’IPaperSink pour transmettre les données au client.
À mesure que l’utilisateur dessine le client de manière interactive, il peint les données immédiatement à l’écran tout en les envoyant à COPaper pour les enregistrer. Lorsque le client nécessite que l’écran soit repeint, il appelle la méthode COPaper Redraw . Ce repeint est courant dans les applications. Par exemple, le repeint se produit lorsque la fenêtre cliente est superposée par une autre fenêtre d’application. Le client a un rendu bitmap de l’image dessinée, mais la bitmap est facilement perdue et doit souvent être repeinte. Le client s’appuie sur COPaper dans le serveur pour les données manuscrites requises pour la repeinte.
Il s’agit d’une division client/serveur courante du travail. Elle est particulièrement appropriée lorsqu’il est nécessaire que plusieurs clients partagent les données. COPaper est codé pour l’activer. Il utilise la fonctionnalité APPUTIL CThreaded pour assurer la sécurité des threads. Une application qui peut exploiter cette conception est une application de tableau blanc partagé, où plusieurs clients peuvent contribuer à un dessin couramment consulté. La prise en charge com com distribuée (DCOM) prend en charge ce type d’utilisation des applications de groupe de travail sur le réseau. Pour plus d’informations, consultez l’exemple REMCLIEN précédent.
Une utilisation plus modeste du schéma client/serveur COPaper consiste à intégrer le comportement des objets implémentés dans différentes applications sur le même ordinateur. Dans ce cas, les clients peuvent être un conteneur ActiveX dans des applications distinctes qui partagent des données gérées par le même objet. Il se peut que ces données ne soient pas les données de dessin manuscrites que le composant DllPaper prend en charge. StoServe peut être utilisé comme infrastructure de départ pour les composants de programmation qui gèrent d’autres types de données partagées.
Informations de support
Le makefile StoServe inscrit le composant COM DllPaper StoServe dans le registre. Ce composant doit être inscrit avant que StoServe soit disponible pour les clients COM externes en tant que serveur pour ce composant. Cette inscription automatique est effectuée à l’aide de l’utilitaire Register.exe intégré à l’exemple REGISTER. Pour générer ou exécuter StoServe, commencez par générer l’exemple de code REGISTER.
Pour plus d’informations sur la configuration de votre système pour générer et tester les exemples de code de cette série de didacticiels COM, consultez Guide pratique pour générer des exemples. Le makefile fourni (MAKEFILE) est compatible avec Microsoft NMAKE. Pour créer une build de débogage, exécutez la commande NMAKE dans la fenêtre d’invite de commandes.
Pour une utilisation pratique dans Microsoft Visual Studio, un fichier projet est fourni pour chaque exemple. Pour charger le projet pour l’exemple StoServe , vous pouvez exécuter Visual Studio à l’invite de commandes dans le répertoire d’exemples comme suit :
MSDEV STOSERVE. DSP
Vous pouvez également double-cliquer sur le fichier Stoserve.dsp dans Windows Explorer pour charger un exemple de projet dans Visual Studio. Dans Visual Studio, vous pouvez parcourir les classes C++ de l’exemple de source et généralement effectuer les autres opérations de modification,compilation-débogage.
Notes
Dans le cadre du Kit de développement logiciel (SDK) de plateforme, la compilation de ces exemples à partir de Visual Studio nécessite le paramètre approprié des chemins d’accès aux répertoires dans Visual Studio. Pour plus d’informations, consultez Guide pratique pour générer des exemples.