ATLDuck 属性サンプル : ATL でのコネクション ポイントの使用

更新 : 2007 年 11 月

ATLDuck 属性サンプルは、atlduck と duck という 2 つのプロジェクトで構成されています。duck プロジェクトは、IDuckInt インターフェイスを実装するオブジェクトのインスタンスを作成します。このインターフェイスには、Flap、Paddle、Quack、および Walk という 4 つのメンバ関数があります。

もう 1 つの atlduck プロジェクトには、IDuckInt インターフェイスのコネクション ポイントがあります。つまり、atlduck プロジェクトはインターフェイスを実装しませんが、インターフェイスの使い方については認識しています。このオブジェクトのインスタンスは 1 つだけ作成されます。2 つのアプリケーション間の接続が確立されると、atlduck はシンクの IDuckInt インターフェイスの関数を呼び出します。この関数は、IConnectionPoint::Advise を呼び出した関数です。

ATLDuck では、aggregatableevent_sourceevent_receiver などの IDL、COM、およびコンパイラのさまざまな属性の例が示されています。DuckInt クラスは、aggregratable("never") 属性を指定することにより集約可能になります。layout dependent=true を設定せずに、DuckDoer クラスは com event_source、DuckInt クラスは com event_receiver としてそれぞれ設定されています。

ATLDuck サンプルは、このサンプルの属性なしバージョンです。

x52zeb6x.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. ソリューション ファイル atlduck.sln を開きます。

  2. [ビルド] メニューの [ソリューションのビルド] をクリックします。これにより、両方のプロジェクトがビルドされ、必要な登録が行われます。作成されるファイルは次のとおりです。

    • atlduck.exe (EXE サーバー)

    • duck.exe (EXE クライアント)

このサンプルを実行するには

  1. [デバッグ] メニューの [デバッグなしで開始] をクリックします。これで、atlduck サーバーと duck クライアントの 1 つが起動します。複数のクライアントを実行するには、duck.exe があるディレクトリに移動し、コマンド プロンプトを使用してそれを手動で実行します。

  2. ダイアログ ボックスが表示されます。ダイアログ ボックスの [Create DoDuck Object] をクリックします。このボタンをクリックすると、CLSID_DuckDoer というクラス ID を持つオブジェクトのインスタンスが作成され、atlduck が実行されます。

  3. atlduck.exe によって、新しいダイアログ ボックスが表示されます。この新しいダイアログ ボックスには、IDuckInt インターフェイスの各関数のボタン、およびリスト ボックスが表示されます。このリスト ボックスには、アクティブなシンクに対する接続とその cookies が一覧表示されます。duck のダイアログ ボックスでは、コネクション ポイントの [Advise] または [Unadvise] のいずれかを選択できます。選択に応じて、ソースから通知を受け取るかどうかが決まります。受け取った通知はステータス編集フィールドに表示されます。また、ATLDuck では、接続がアドバイズされるときにコネクション ポイントによって提供される cookie の値が示されます。

属性

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

  • ATLDuck   aggregatable、coclass、dispinterface、event_source、exe、helpstring、id、module、name、progid、uuid、vi_progid

  • ATLDuck/Duck   aggregatable、coclass、default、dispinterface、event_receiver、exe、helpstring、id、iid_is、in、module、name、object、out、progid、unique、uuid、version、vi_progid

クラスとキーワード

このサンプルでは、次のクラスを使用します。

CDialog (MFC)、CComObject (ATL)、IConnectionPointImpl<CDuckDoer> (ATL)

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

_ASSERTE; _tcslen; _VERIFY; AddRef; Advise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::Unlock; CComObjectRootEx; CDialogImpl; CenterWindow; CoInitialize; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_HANDLER; COMMAND_ID_HANDLER; CONNECTION_POINT_ENTRY; CoSuspendClassObjects; CoUninitialize; Create; DECLARE_CLASSFACTORY_SINGLETON; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DestroyWindow; DispatchMessage; EnableWindow; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MSG_MAP; END_OBJECT_MAP; ExitProcess; FindConnectionPoint; GetCommandLine; GetDC; GetDlgItem; GetMessage; GetTextExtentPoint32; IConnectionPointContainerImpl; IConnectionPointImpl; Init; IsWindowVisible; MESSAGE_HANDLER; MessageBox; OBJECT_ENTRY; OleInitializeCoCreateInstance; OnCancel; OnFlap; OnInitDialog; OnOK; OnPaddle; OnWalk OnQuack; PostThreadMessage; QueryInterface; RecalcListboxExtent; RegisterClassObjects; RegisterServer; reinterpret_cast; ReleaseDC; RevokeClassObjects; SendMessage; SetOwner; SetWindowText; ShowStatus; ShowWindow; Unadvise; UnregisterServer; UNUSED_ALWAYS; UpdateRegistryFromResource; UpdateWindow; USES_CONVERSION

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

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

参照

その他の技術情報

ATL 属性のサンプル