次の方法で共有


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

ATLDuck サンプルの 4 つのプロジェクトに含まれています。atlduck、アヒルのそれぞれのプロキシ/スタブ atlduckPS および duckPS を射影します。 duck プロジェクトは、IDuckInt インターフェイスを実装するオブジェクトのインスタンスを作成します。 このインターフェイスには、4 つのメンバー関数が含まれています。フラップ、Paddle、Quack、および Walk。

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

このサンプルでは、別のプロセスでインターフェイスを接続するために必要なマーシャリング コード (atlduckPS および duckPS を使用) も利用します。

ATLDuck 属性サンプル : ATL でのコネクション ポイントの使用は、このサンプルの属性付きバージョンです。

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

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

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

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. これで、4 つのプロジェクトがすべてビルドされ、必要な登録が行われます。 作成されるファイルは次のとおりです。

    • atlduck.exe (EXE サーバー)

    • atlduckPS.dll (atlduck.exe サーバーのマーシャリング DLL)

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

    • duckPS.dll (duck.exe クライアントのマーシャリング DLL)

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

  1. duck.exe のインスタンスを起動します。

    注意

    duck.exe のインスタンスを複数開くと、コネクション ポイントの使い方がよくわかります。

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

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

クラスとキーワード

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

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

参照

その他の技術情報

ATL サンプル