次の方法で共有


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

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

もう 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 サンプルは、このサンプルの属性なしバージョンです。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

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

Visual Studio のサンプルにアクセスするには

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

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

このサンプルをビルドするには

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

  2. From the Build menu, click Build Solution. これにより、両方のプロジェクトがビルドされ、必要な登録が行われます。 作成されるファイルは次のとおりです。

    • atlduck.exe (EXE サーバー)

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

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

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

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

  3. atlduck.exe によって、新しいダイアログ ボックスが表示されます。 この新しいダイアログ ボックスには、IDuckInt インターフェイスの各関数のボタン、およびリスト ボックスが表示されます。このリスト ボックスには、アクティブなシンクに対する接続とその cookies が一覧表示されます。 アヒルのダイアログ ボックスから、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; OnWalkOnQuack; PostThreadMessage; QueryInterface; RecalcListboxExtent; RegisterClassObjects; RegisterServer; reinterpret_cast; ReleaseDC; RevokeClassObjects; SendMessage; SetOwner; SetWindowText; ShowStatus; ShowWindow; Unadvise; UnregisterServer; UNUSED_ALWAYS; UpdateRegistryFromResource; UpdateWindow; USES_CONVERSION

注意

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

参照

その他の技術情報

ATL 属性のサンプル