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 では、aggregatable、event_source、event_receiver などの IDL、COM、およびコンパイラのさまざまな属性の例が示されています。DuckInt クラスは、aggregratable("never") 属性を指定することにより集約可能になります。layout dependent=true を設定せずに、DuckDoer クラスは com event_source、DuckInt クラスは com event_receiver としてそれぞれ設定されています。
ATLDuck サンプルは、このサンプルの属性なしバージョンです。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドするには
ソリューション ファイル atlduck.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。これにより、両方のプロジェクトがビルドされ、必要な登録が行われます。作成されるファイルは次のとおりです。
atlduck.exe (EXE サーバー)
duck.exe (EXE クライアント)
このサンプルを実行するには
[デバッグ] メニューの [デバッグなしで開始] をクリックします。これで、atlduck サーバーと duck クライアントの 1 つが起動します。複数のクライアントを実行するには、duck.exe があるディレクトリに移動し、コマンド プロンプトを使用してそれを手動で実行します。
ダイアログ ボックスが表示されます。ダイアログ ボックスの [Create DoDuck Object] をクリックします。このボタンをクリックすると、CLSID_DuckDoer というクラス ID を持つオブジェクトのインスタンスが作成され、atlduck が実行されます。
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
メモ : |
---|
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。 |