StoServe の概要
目的
このコード例の主な焦点は、複合ファイルの実装で提供されている Structured Storage サービスの使用です。 標準の IStorage インターフェイスと IStream インターフェイスの使用方法について説明します。 StoServe は 、StoClien コード例と連携して、クライアントとサーバーによる複合ファイル ストレージの共同使用を示しています。
機能
StoServe サンプルでは、実質的に空白の図面用紙を表す COPaper COM オブジェクトが導入されています。
COPaper オブジェクトは、指定された色と幅の "インク" を使用して、紙面に自由形式の描画用の一連の機能を公開します。 この機能は、多くのバージョンのMicrosoft Visual C++の "落書き" チュートリアル サンプルに似ています。 StoServe/StoClien サンプルの違いは、主に COM テクノロジに基づくアーキテクチャです。 COPaper オブジェクトの電子描画用紙機能は、カスタム IPaper インターフェイスを介してクライアントが使用できます。 COPaper は IPaper インターフェイスを実装します。 クライアントとサーバーの間では、明確なアーキテクチャの違いが維持されます。 COPaper ではグラフィカル ユーザー インターフェイス (GUI) は提供されません。 COPaper オブジェクトの設計は、すべての GUI 動作にクライアントに依存します。 COPaper は、描画されたインク データのサーバー ベースのキャプチャとストレージのみをカプセル化します。
COPaper サーフェスに描画されるインク データは、複合ファイルに格納して読み込むことができます。 IPaper、Save、Load の各メソッドは、IStorage インターフェイス ポインターを受け入れます。 COPaper は、このクライアント提供の IStorage インターフェイスを使用して、描画データを格納します。
COPaper はインプロセス サーバーに格納され、カスタム COM コンポーネントとして一般公開されます。 このチュートリアル シリーズの他のサーバーと同様に、StoServe は自己登録 COM サーバーです。 これにより、レジストリのCLSID_DllPaper登録を使用して、COPaper オブジェクトの種類をクライアントが DllPaper コンポーネントとして使用できるようになります。
前の CONSERVE サーバーと同様に、接続可能なオブジェクト機能は COPaper でサポートされています。 IConnectionPointContainer インターフェイスが公開され、適切な接続ポイントが実装されます。 このコンテキストでは、送信カスタム IPaperSink インターフェイスは、クライアントに通知を送信する際に使用するように宣言されています。
2 つの IPaper および IPaperSink カスタム インターフェイスは IPAPER で宣言されています。共通の兄弟 \INC ディレクトリにある H。 インターフェイスとオブジェクトの GUID は PAPGUIDS で定義されています。同じ共通インクルード ディレクトリにある H。
APPUTIL の CThreaded 機能は、FRESERVE サンプルの場合と同様に、スレッド セーフを実現するために StoServe によって使用されます。 COPaper オブジェクトは CThreaded クラスから派生し、OwnThis メソッドと UnOwnThis メソッドを継承します。 これらのメソッドを使用すると、一度に 1 つのスレッドのみが 、StoServe サーバーと、サーバーによって管理される COPaper オブジェクトにアクセスできます。
COPaper COM オブジェクト
COPaper COM オブジェクトは、この StoServe インプロセス サーバーによって管理される単一のオブジェクトタイプです。 COPaper は、標準 の IConnectionPointContainer インターフェイスの実装とカスタム IPaper インターフェイスの実装を使用して、接続可能な COM オブジェクトとして構築されます。 COPaper は 、クライアントが COPaper のインスタンスに対して少量の電子用紙操作を実行できるように、IPaper インターフェイスを公開します。 重要な操作は、インク描画シーケンスを開始し、COPaper 仮想用紙サーフェスにインク データを描画し、インク描画シーケンスを終了することです。 このスキームでは、クライアントはマウスまたはタブレット デバイスによって駆動される GUI アプリケーションであると見なされます。 クライアントは、マウスの移動を COPaper への要求に変換する役割を担います。これにより、これらの要求がインク データとして保存されます。
COPaper には、2 つのレベルのインク データの保存があります。 COPaper は、現在の図面を表す RAM ベースの配列にインク データを保存し、COPaper は図面全体を複合ファイルに永続的に保存します。 IPaper インターフェイスのメソッドは両方を実行します。
クライアントは描画された用紙データを管理せず、画面に画像としてレンダリングする責任があるため、 COPaper の IPaper 実装では、クライアントが描画データを取得できるようにするメソッドを公開する必要があります。 この目的には、COPaper の接続可能なオブジェクト テクノロジが使用されます。 CONNPOINT_PAPERSINK接続ポイントは COPaper によって実装されるため、クライアントは COPaper に接続して描画用のインク データを受信できます。 クライアントは、最初に COPaper オブジェクトの IPaper::Redraw メソッドを呼び出して、現在の図面のすべてのインク データを要求します。 その後、Redraw の COPaper 実装では 、IPaperSink のクライアント実装を使用して、データをクライアントに渡します。
ユーザーが対話形式でクライアントに描画すると、データがすぐに画面に描画され、保存のために COPaper に送信されます。 クライアントが画面を再描画する必要がある場合は、COPaper Redraw メソッドを呼び出します。 このような再描画は、アプリケーションで一般的です。 たとえば、再描画は、クライアント ウィンドウが別のアプリケーション ウィンドウによってオーバーレイされるときに発生します。 クライアントには描画イメージのビットマップ レンダリングがありますが、ビットマップは簡単に失われ、多くの場合、再描画する必要があります。 クライアントは、再描画に必要なインク データをサーバーの COPaper に依存します。
これは、一般的なクライアント/サーバーの分業です。 特に、複数のクライアントでデータを共有する必要がある場合に適しています。 COPaper は、これを有効にするようにコーディングされています。 APPUTIL CThreaded 機能を使用してスレッド セーフを実現します。 この設計を悪用する可能性があるアプリケーションは、複数のクライアントが一般的に表示される図面に貢献できる共有ホワイトボード アプリケーションです。 分散 COM (DCOM) の COM サポートでは、ネットワーク全体でのこの種類のワークグループ アプリケーションの使用がサポートされています。 詳細については、前の REMCLIEN サンプルを参照してください。
COPaper クライアント/サーバー スキームのより控えめな使用方法は、同じコンピューター上の異なるアプリケーションに実装されたオブジェクトの動作を統合することです。 この場合、クライアントは、同じオブジェクトによって管理されるデータを共有する別のアプリケーションの ActiveX コンテナーである可能性があります。 このデータは、DllPaper コンポーネントがサポートするインク描画データではない可能性があります。 StoServe は、他の種類の共有データを管理するプログラミング コンポーネントの開始フレームワークとして使用できます。
サポート情報
StoServe メイクファイルは、レジストリに StoServe DllPaper COM コンポーネントを登録します。 このコンポーネントは、そのコンポーネントのサーバーとして外部の COM クライアントで StoServe を使用できるようにするには、事前に登録する必要があります。 この自己登録は、REGISTER サンプルに組み込まれているRegister.exe ユーティリティを使用して行われます。 StoServe をビルドまたは実行するには、まず REGISTER コード例をビルドします。
この COM チュートリアル シリーズのコード例をビルドしてテストするようにシステムを設定する方法の詳細については、「 サンプルをビルドする方法」を参照してください。 指定されたメイクファイル (MAKEFILE) は Microsoft NMAKE 互換です。 デバッグ ビルドを作成するには、コマンド プロンプト ウィンドウで NMAKE コマンドを発行します。
Microsoft Visual Studio で便利に使用するために、サンプルごとにプロジェクト ファイルが用意されています。 StoServe の例のプロジェクトを読み込むには、次のようにサンプル ディレクトリのコマンド プロンプトで Visual Studio を実行します。
MSDEV STOSERVE。Dsp
Windows エクスプローラーの Stoserve.dsp ファイルをダブルクリックして、サンプル プロジェクトを Visual Studio に読み込むこともできます。 Visual Studio では、サンプル ソースの C++ クラスを参照し、通常は他の編集/コンパイル/デバッグ操作を実行できます。
注意
プラットフォーム ソフトウェア開発キット (SDK) の一部として、Visual Studio 内からこれらのサンプルをコンパイルするには、Visual Studio でディレクトリ パスを適切に設定する必要があります。 詳細については、「 サンプルをビルドする方法」を参照してください。