CONNECT サンプル : コネクション ポイントの実装と使用例 (C++ サンプル)
更新 : 2007 年 11 月
このサンプルは、マルチスレッド環境でのコネクション ポイント (IConnectionPointContainer インターフェイスおよび IConnectionPoint インターフェイス) の使用と実装を示します。
メモ : |
---|
このサンプルは、コネクション ポイント シンクに対するコンパイラの COM サポートを示すために、ATL の Connect サンプルを作成し直したものです。Drive クライアントはネイティブな実装ですが、MDrive クライアントは、シンク オブジェクトを作成するためのクラス ファクトリの使用で、COM の正確な動作をいくらか強調しています。Drive および MDrive は、COM サポートを ATL または MFC には一切依存していません。 |
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないため、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル connect.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
実行するクライアント (Drive と MDrive のいずれか) を選択します。次に、プロジェクト フォルダを右クリックし、[スタートアップ プロジェクトに設定] をクリックして、そのクライアントをスタートアップ プロジェクトに指定します。クライアントの詳細については、「サンプルの動作」のセクションを参照してください。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。
サンプルの動作
サーバーは Connect.dll で実装されます。この DLL を使用すると、CRandom C++ クラスで実装される CoRandom COM オブジェクトを作成できます。COM オブジェクトは、IRandom (デュアル インターフェイス) および IConnectionPointContainer をサポートし、IRandomEvent インターフェイスの接続を承認します。
IRandom インターフェイスは、以下のメソッドをサポートします。
Start オブジェクト内でスレッドを開始します。
Stop オブジェクト内でスレッドを中断します。
StopAll 実行中のスレッドをすべて中断します。
実行時には、コネクション ポイントに達するまで、オブジェクト内のセカンダリ スレッドがイベントを発生させます。
Drive と MDrive の 2 つのクライアントが用意されています。これらのクライアントは、Drive サブディレクトリと MDrive サブディレクトリにあります。
Drive.exe は、IRandomEvent インターフェイスを実装する 1 つのオブジェクトが設定されている、簡単なコンソール アプリケーションです。CoRandom オブジェクトを作成し、コネクション ポイントで Advise と Unadvise を呼び出して、ドライブのオブジェクトへのイベントを CoRandom オブジェクトに発生させます。
Mdrive.exe は、MFC ダイアログ ベースのアプリケーションであり、複数のアドバイズ シンクを作成し、サーバーが作成するスレッド数を制御できます。Mdrive.exe を実行する場合は、[Start] ボタンを少なくとも 1 回クリックしてから、Advise ボタンを複数回クリックします。[Advise] をクリックするたびにコネクション ポイントが 1 つ追加され、ディスプレイの幅が広くなります。[Advise] をクリックしない場合、ディスプレイは変化しません。