Share via


CONNECT 属性サンプル : コネクション ポイントの実装と使用の例

更新 : 2007 年 11 月

CONNECT 属性サンプルでは、マルチスレッド環境でのコネクション ポイント (IConnectionPointContainer インターフェイスおよび IConnectionPoint インターフェイス) の実装と使用例を示します。

このサンプルでは、support_errorinfoevent_sourceevent_receiver など、頻繁に使用される IDL、COM、およびコンパイラの各属性の例をいくつか示します。

1zte2c28.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。

サンプルとそのインストール手順を取得するには

  • Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。

    詳細については、「サンプル ファイルの格納場所」を参照してください。

  • 使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。

  • サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。

サンプルのビルドと実行

このサンプルをビルドして実行するには

  1. connect.sln ソリューション ファイルを開きます。

  2. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  3. 実行するクライアント (Drive と MDrive のいずれか) を選択します。次に、プロジェクト フォルダを右クリックし、[スタートアップ プロジェクトに設定] をクリックして、そのクライアントをスタートアップ プロジェクトに指定します。クライアントの詳細については、「サンプルの動作」のセクションを参照してください。

  4. [デバッグ] メニューの [デバッグなしで開始] をクリックします。

サンプルの動作

サーバーは 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] をクリックしない場合、ディスプレイは変化しません。

属性

このサンプルでは次の属性を使用します。

  • Connect   coclass、default、dll、dual、event_source、helpstring、id、in、module、name、object、out、pointer_default、progid、support_error_info、uuid、vi_progid

  • Connect/drive   event_receiver、module

キーワード

このサンプルでは、次のキーワードを使用します。

AfxGetApp; AfxMessageBox; AtlAdvise; ATLASSERT; AtlUnadvise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MESSAGE_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObject::CreateInstance; CComObjectRoot; CDialog::OnCancel; CDialog::OnOK; CloseHandle; CoCreateInstance; COleTemplateServer::RegisterAll; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COM_INTERFACE_ENTRY2; CONNECTION_POINT_ENTRY; CoUninitialize; CreateEvent; CreateThread; DECLARE_REGISTRY_RESOURCEID; DisableThreadLibraryCalls; DoModal; DrawIcon; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MESSAGE_MAP; END_OBJECT_MAP; GdiFlush; GetClientRect; GetDlgItem; GetTickCount; GetUnknown; IConnectionPointContainerImpl; IConnectionPointImpl; IDispatchImpl; ISupportErrorInfo; LoadIcon; Lock; memset; OBJECT_ENTRY; ON_COMMAND; puts; ReleaseDC; SendMessage; SetEvent; SetIcon; SetPixel; Sleep; Unadvise; Unlock; WaitForSingleObject

1zte2c28.alert_note(ja-jp,VS.90).gifメモ :

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

ATL 属性のサンプル