Compartir a través de


Introducción a StoServe

Propósito

El enfoque principal de este ejemplo de código es el uso de servicios de Almacenamiento estructurado, tal como se proporciona en la implementación de archivos compuestos. Se describe el uso de las interfaces IStorage e IStream estándar. StoServe funciona con el ejemplo de código StoClien para ilustrar el uso conjunto del almacenamiento de archivos compuesto por cliente y servidor.

Funcionalidad

En el ejemplo StoServe se presenta el objeto COM COPaper, que prácticamente representa una hoja en blanco de papel de dibujo.

Los objetos COPaper exponen un conjunto de características para dibujar de forma libre en la superficie de papel con "tinta" de color y ancho especificados. La funcionalidad es externamente similar a los ejemplos del tutorial "scribble" en muchas versiones de Microsoft Visual C++. La diferencia en los ejemplos de StoServe/StoClien es una arquitectura basada principalmente en la tecnología COM. Las características electrónicas de papel de dibujo de los objetos COPaper están disponibles para los clientes a través de una interfaz IPaper personalizada. COPaper implementa la interfaz IPaper . Se mantiene una clara distinción arquitectónica entre el cliente y el servidor. CoPaper no proporciona ninguna interfaz gráfica de usuario (GUI). El diseño del objeto COPaper se basa en el cliente para todo el comportamiento de la GUI. COPaper encapsula solo la captura y el almacenamiento basados en servidor de los datos de entrada de lápiz dibujados.

Los datos de entrada de lápiz que se dibujan en la superficie COPaper se pueden almacenar y cargar desde archivos compuestos. Los métodos IPaper, Save y Load aceptan un puntero de interfaz IStorage . COPaper usa esta interfaz IStorage proporcionada por el cliente para almacenar los datos de dibujo.

CoPaper se hospeda en un servidor en proceso y está disponible públicamente como un componente COM personalizado. De forma similar a otros servidores de esta serie de tutoriales, StoServe es un servidor COM autoescribible. Hace que el tipo de objeto COPaper esté disponible para los clientes como componente DllPaper mediante un registro de CLSID_DllPaper en el Registro.

Al igual que en el servidor CONSERVE anterior, las características de objeto conectables se admiten en COPaper. La interfaz IConnectionPointContainer se expone y se implementa un punto de conexión adecuado. En este contexto, se declara una interfaz IPaperSink personalizada saliente para su uso en el envío de notificaciones al cliente.

Las dos interfaces personalizadas IPaper e IPaperSink se declaran en IPAPER. H ubicado en el directorio del mismo nivel común \INC. Los GUID de las interfaces y los objetos se definen en PAPGUIDS. H ubicado en ese mismo directorio de inclusión común.

StoServe utiliza la instalación CThreaded en APPUTIL para lograr la seguridad de subprocesos, como se encontraba en el ejemplo FRESERVE. Los objetos COPaper se derivan de la clase CThreaded y heredan sus métodos OwnThis y UnOwnThis. Estos métodos permiten que solo un subproceso a la vez tenga acceso al servidor StoServe y a los objetos COPaper administrados por el servidor.

CoPaper COM (objeto)

El objeto COM COPaper es el tipo de objeto único administrado por este servidor en proceso de StoServe . COPaper se construye como un objeto COM conectable con una implementación de la interfaz IConnectionPointContainer estándar y una implementación de la interfaz IPaper personalizada. COPaper expone la interfaz IPaper para que los clientes puedan realizar un pequeño conjunto de operaciones de papel electrónico en una instancia de COPaper. Las operaciones esenciales están iniciando una secuencia de dibujo de lápiz, dibujando los datos de tinta en la superficie de papel virtual COPaper y finalizando la secuencia de dibujo de tinta. En este esquema, se supone que el cliente es una aplicación de GUI controlada por un dispositivo de mouse o tableta. El cliente es responsable de traducir los movimientos del mouse en solicitudes a COPaper, lo que guarda estas solicitudes como datos de entrada de lápiz.

Hay dos niveles de ahorro de datos de entrada de lápiz en COPaper. COPaper guarda los datos de entrada de lápiz en una matriz basada en RAM que representa el dibujo actual y COPaper guarda persistentemente un dibujo completo en un archivo compuesto. Los métodos de la interfaz IPaper realizan ambos.

Dado que el cliente no administra los datos de papel dibujados, pero es responsable de representarlos como una imagen en la pantalla, la implementación de IPaper en COPaper debe exponer un método que permita al cliente obtener los datos de dibujo. La tecnología de objetos conectable en COPaper se usa para este fin. CoPaper implementa un punto de conexión CONNPOINT_PAPERSINK para que un cliente pueda conectarse a COPaper para recibir los datos de entrada de lápiz para dibujar. El cliente llama primero al método IPaper::Redraw en el objeto COPaper para solicitar todos los datos de entrada de lápiz del dibujo actual. A continuación, la implementación de COPaper de Redraw usa la implementación de cliente de IPaperSink para pasar los datos al cliente.

A medida que el usuario dibuja interactivamente en el cliente, pinta los datos inmediatamente en la pantalla y, al mismo tiempo, lo envía a COPaper para guardarlos. Cuando el cliente requiere que se vuelva a dibujar la pantalla, llama al método COPaper Redraw . Este reintentos es común en las aplicaciones. Por ejemplo, la reintentos se produce cuando otra ventana de aplicación superpone la ventana del cliente. El cliente tiene una representación de mapa de bits de la imagen dibujada, pero el mapa de bits se pierde fácilmente y a menudo se debe volver a pintar. El cliente se basa en COPaper en el servidor para los datos de entrada de lápiz necesarios para volver a pintar.

Se trata de una división de cliente o servidor común del trabajo. Es especialmente adecuado cuando hay un requisito para que varios clientes compartan los datos. CoPaper está codificado para habilitarlo. Usa la instalación APPUTIL CThreaded para lograr la seguridad de los subprocesos. Una aplicación que podría aprovechar este diseño es una aplicación de pizarra compartida, donde varios clientes pueden contribuir a un dibujo visto con frecuencia. La compatibilidad con COM para COM distribuido (DCOM) admite este tipo de uso de aplicaciones de grupo de trabajo en toda la red. Para obtener más información, vea el ejemplo de REMCLIEN anterior.

Un uso más modesto del esquema de cliente/servidor copaper es integrar el comportamiento de los objetos implementados en diferentes aplicaciones del mismo equipo. En este caso, los clientes pueden ser un contenedor ActiveX en aplicaciones independientes que comparten datos administrados por el mismo objeto. Es posible que estos datos no sean los datos de dibujo de lápiz que admite el componente DllPaper. StoServe se puede usar como marco de inicio para programar componentes que administran otros tipos de datos compartidos.

Información complementaria

El archivo makeFile stoServe registra el componente COM StoServe DllPaper en el registro. Este componente debe registrarse antes de que StoServe esté disponible para clientes COM externos como servidor para ese componente. Este registro automático se realiza mediante la utilidad Register.exe integrada en el ejemplo REGISTER. Para compilar o ejecutar StoServe, primero compile el ejemplo de código REGISTER.

Para obtener más información sobre cómo configurar el sistema para compilar y probar los ejemplos de código de esta serie de tutoriales COM, vea Cómo compilar ejemplos. El archivo make (MAKEFILE) proporcionado es compatible con Microsoft NMAKE. Para crear una compilación de depuración, emita el comando NMAKE en la ventana del símbolo del sistema.

Para un uso práctico en Microsoft Visual Studio, se proporciona un archivo de proyecto para cada ejemplo. Para cargar el proyecto para el ejemplo de StoServe , puede ejecutar Visual Studio en el símbolo del sistema del directorio de ejemplos de la siguiente manera:

MSDEV STOSERVE. DSP

También puede hacer doble clic en el archivo Stoserve.dsp en el Explorador de Windows para cargar un proyecto de ejemplo en Visual Studio. En Visual Studio, puede examinar las clases de C++ del origen de ejemplo y, por lo general, realizar las demás operaciones edit-compile-debug.

Nota

Como parte del Kit de desarrollo de software de plataforma (SDK), la compilación de estos ejemplos desde Visual Studio requiere la configuración adecuada de las rutas de acceso de directorio en Visual Studio. Para obtener más información, vea Cómo compilar ejemplos.