ATLDuck サンプル : ATL でのコネクション ポイントの使用
更新 : 2007 年 11 月
ATLDuck サンプルは、atlduck、duck、およびそれぞれに対応するプロキシ/スタブ プロジェクトの atlduckPS と duckPS という 4 つのプロジェクトで構成されます。duck プロジェクトは、IDuckInt インターフェイスを実装するオブジェクトのインスタンスを作成します。このインターフェイスには、Flap、Paddle、Quack、および Walk という 4 つのメンバ関数が含まれます。
もう 1 つの atlduck プロジェクトには、IDuckInt インターフェイスのコネクション ポイントがあります。つまり、atlduck プロジェクトはインターフェイスを実装しませんが、インターフェイスの使い方については認識しています。このオブジェクトのインスタンスは 1 つだけ作成されます。2 つのアプリケーション間の接続が確立されると、atlduck はシンクの IDuckInt インターフェイスの関数を呼び出します。この関数は、IConnectionPoint::Advise を呼び出した関数です。
このサンプルでは、別のプロセスでインターフェイスを接続するために必要なマーシャリング コード (atlduckPS および duckPS を使用) も利用します。
ATLDuck 属性サンプル : ATL でのコネクション ポイントの使用は、このサンプルの属性付きバージョンです。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドするには
atlduck.sln ソリューション ファイルを開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。これで、4 つのプロジェクトがすべてビルドされ、必要な登録が行われます。作成されるファイルは次のとおりです。
atlduck.exe (EXE サーバー)
atlduckPS.dll (atlduck.exe サーバーのマーシャリング DLL)
duck.exe (EXE クライアント)
duckPS.dll (duck.exe クライアントのマーシャリング DLL)
このサンプルを実行するには
duck.exe のインスタンスを起動します。
メモ : duck.exe のインスタンスを複数開くと、コネクション ポイントの使い方がよくわかります。
ダイアログ ボックスが表示されます。ダイアログ ボックスの [Create DoDuck Object] をクリックします。このボタンをクリックすると、CLSID_DuckDoer というクラス ID を持つオブジェクトのインスタンスが作成され、atlduck が実行されます。
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