Panoramica di StoServe
Scopo
L'obiettivo principale di questo esempio di codice è l'uso dei servizi di archiviazione strutturati, come fornito nell'implementazione dei file composti. Viene descritto l'uso delle interfacce IStorage e IStream standard. StoServe funziona con l'esempio di codice StoClien per illustrare l'uso congiunto dell'archiviazione di file composti da client e server.
Funzionalità
L'esempio StoServe introduce l'oggetto COM COPaper, che rappresenta praticamente un foglio vuoto di carta da disegno.
Gli oggetti COPaper espongono un set di caratteristiche per il disegno in formato libero sulla superficie di carta utilizzando "inchiostro" del colore e della larghezza specificati. La funzionalità è esternamente simile agli esempi di esercitazione "scribble" in molte versioni di Microsoft Visual C++. La differenza negli esempi StoServe/StoClien è un'architettura basata principalmente sulla tecnologia COM. Le caratteristiche elettroniche della carta di disegno degli oggetti COPaper sono disponibili per i client tramite un'interfaccia IPaper personalizzata. COPaper implementa l'interfaccia IPaper . Una chiara distinzione architetturale viene mantenuta tra client e server. Non viene fornita alcuna interfaccia utente grafica (GUI) da COPaper. La progettazione dell'oggetto COPaper si basa sul client per tutto il comportamento dell'interfaccia utente grafica. COPaper incapsula solo l'acquisizione basata su server e l'archiviazione dei dati input penna disegnati.
I dati input penna disegnati sulla superficie COPaper possono essere archiviati e caricati da file composti. I metodi IPaper, Save e Load accettano un puntatore all'interfaccia IStorage . COPaper usa questa interfaccia IStorage fornita dal client per archiviare i dati di disegno.
COPaper è ospitato in un server in-process e viene reso disponibile pubblicamente come componente COM personalizzato. Analogamente ad altri server di questa serie di esercitazioni, StoServe è un server COM autoregistrato. Rende disponibile il tipo di oggetto COPaper ai client come componente DllPaper usando una registrazione CLSID_DllPaper nel Registro di sistema.
Come nel server CONSERVE precedente, le funzionalità degli oggetti collegabili sono supportate in COPaper. L'interfaccia IConnectionPointContainer viene esposta e viene implementato un punto di connessione appropriato. In questo contesto, un'interfaccia IPaperSink personalizzata in uscita viene dichiarata per l'uso nell'invio di notifiche al client.
Le due interfacce personalizzate IPaper e IPaperSink sono dichiarate in IPAPER. H che si trova nella directory comune di pari livello \INC. I GUID per le interfacce e gli oggetti sono definiti in PAPGUIDS. H che si trova nella stessa directory di inclusione comune.
La struttura CThreaded in APPUTIL viene usata da StoServe per ottenere la thread safety, come nell'esempio FRESERVE. Gli oggetti COPaper derivano dalla classe CThreaded e ereditano i relativi metodi OwnThis e UnOwnThis. Questi metodi consentono a un solo thread alla volta di avere accesso al server StoServe e agli oggetti COPaper gestiti dal server.
Oggetto COM COPaper
L'oggetto COM COPaper è il tipo di oggetto singolo gestito da questo server in-process StoServe . COPaper viene costruito come oggetto COM collegabile con un'implementazione dell'interfaccia IConnectionPointContainer standard e un'implementazione dell'interfaccia IPaper personalizzata. COPaper espone l'interfaccia IPaper in modo che i client possano eseguire un piccolo set di operazioni di carta elettronica su un'istanza di COPaper. Le operazioni essenziali iniziano una sequenza di disegno a penna, disegnando i dati dell'input penna sulla superficie di carta virtuale COPaper e terminando la sequenza di disegno dell'input penna. In questo schema si presuppone che il client sia un'applicazione GUI guidata da un dispositivo mouse o tablet. Il client è responsabile della conversione dei movimenti del mouse in richieste a COPaper, che salva queste richieste come dati input penna.
Esistono due livelli di salvataggio dei dati input penna in COPaper. COPaper salva i dati dell'input penna in una matrice basata su RAM che rappresenta il disegno corrente e COPaper salva in modo permanente un intero disegno in un file composto. I metodi nell'interfaccia IPaper eseguono entrambi.
Poiché il client non gestisce i dati di carta disegnati, ma è responsabile del rendering come immagine sullo schermo, l'implementazione IPaper in COPaper deve esporre un metodo che consente al client di ottenere i dati di disegno. La tecnologia a oggetti connettibili in COPaper viene usata a questo scopo. Un CONNPOINT_PAPERSINK punto di connessione viene implementato da COPaper in modo che un client possa connettersi a COPaper per ricevere i dati dell'input penna per il disegno. Il client chiama innanzitutto il metodo IPaper::Redraw sull'oggetto COPaper per richiedere tutti i dati input penna del disegno corrente. L'implementazione COPaper di Redraw usa quindi l'implementazione client di IPaperSink per passare i dati al client.
Quando l'utente disegna in modo interattivo il client, disegna immediatamente i dati sullo schermo, inviandoli anche a COPaper per il salvataggio. Quando il client richiede l'aggiornamento dello schermo, chiama il metodo COPaper Redraw . Tale aggiornamento è comune nelle applicazioni. Ad esempio, l'aggiornamento si verifica quando la finestra del client è sovrapposta da un'altra finestra dell'applicazione. Il client dispone di un rendering bitmap dell'immagine disegnata, ma la bitmap viene facilmente persa e spesso deve essere ridisegnata. Il client si basa su COPaper nel server per i dati dell'input penna necessari per il ripainting.
Si tratta di una divisione client/server comune del lavoro. È particolarmente appropriato quando è necessario che più client convidano i dati. CoPaper viene codificato per abilitare questa operazione. Usa la funzionalità APPUTIL CThreaded per ottenere la thread safety. Un'applicazione che potrebbe sfruttare questa progettazione è un'applicazione di lavagna condivisa, in cui più client possono contribuire a un disegno comunemente visualizzato. Il supporto COM per DCOM (Distributed COM) supporta questo tipo di utilizzo dell'applicazione del gruppo di lavoro in rete. Per altre informazioni, vedere l'esempio REMCLIEN precedente.
Un uso più modesto dello schema client/server COPaper consiste nell'integrare il comportamento per gli oggetti implementati in applicazioni diverse nello stesso computer. In questo caso, i client potrebbero essere un contenitore ActiveX in applicazioni separate che condividono i dati gestiti dallo stesso oggetto. Questi dati potrebbero non essere i dati di disegno a penna supportati dal componente DllPaper. StoServe può essere usato come framework iniziale per i componenti di programmazione che gestiscono altri tipi di dati condivisi.
Informazioni relative al supporto
Il makefile StoServe registra il componente StoServe DllPaper COM nel Registro di sistema. Questo componente deve essere registrato prima che StoServe sia disponibile per i client COM esterni come server per tale componente. Questa autoregistrazione viene eseguita usando l'utilità Register.exe incorporata nell'esempio REGISTER. Per compilare o eseguire StoServe, compilare prima di tutto l'esempio di codice REGISTER.
Per altre informazioni sulla configurazione del sistema per compilare e testare gli esempi di codice in questa serie di esercitazioni COM, vedere How to Build Samples.For more information about setting up your system to build and test the code examples in this COM Tutorial series, see How to Build Samples. Il makefile fornito (MAKEFILE) è compatibile con Microsoft NMAKE. Per creare una build di debug, eseguire il comando NMAKE nella finestra del prompt dei comandi.
Per un uso pratico in Microsoft Visual Studio, viene fornito un file di progetto per ogni esempio. Per caricare il progetto per l'esempio StoServe , è possibile eseguire Visual Studio al prompt dei comandi nella directory samples come indicato di seguito:
MSDEV STOSERVE. DSP
È anche possibile fare doppio clic sul file Stoserve.dsp in Esplora risorse per caricare un progetto di esempio in Visual Studio. In Visual Studio è possibile esplorare le classi C++ dell'origine di esempio ed eseguire in genere le altre operazioni edit-compile-debug.
Nota
Come parte di Platform Software Development Kit (SDK), la compilazione di questi esempi da Visual Studio richiede l'impostazione corretta dei percorsi di directory in Visual Studio. Per altre informazioni, vedere How to Build Samples.