Share via


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

更新 : 2007 年 11 月

ATLDuck サンプルは、atlduck、duck、およびそれぞれに対応するプロキシ/スタブ プロジェクトの atlduckPS と duckPS という 4 つのプロジェクトで構成されます。duck プロジェクトは、IDuckInt インターフェイスを実装するオブジェクトのインスタンスを作成します。このインターフェイスには、FlapPaddleQuack、および Walk という 4 つのメンバ関数が含まれます。

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

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

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

10tkk23z.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. [ビルド] メニューの [ソリューションのビルド] をクリックします。これで、4 つのプロジェクトがすべてビルドされ、必要な登録が行われます。作成されるファイルは次のとおりです。

    • atlduck.exe (EXE サーバー)

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

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

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

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

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

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

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

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

  3. atlduck.exe によって、新しいダイアログ ボックスが表示されます。この新しいダイアログ ボックスには、IDuckInt インターフェイスの各関数のボタン、およびリスト ボックスが表示されます。このリスト ボックスには、アクティブなシンクに対する接続とその cookies が一覧表示されます。duck のダイアログ ボックスでは、コネクション ポイントの [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 サンプル