共用方式為


ATLDuck 範例:使用具 ATL 的連接點

更新:2007 年 11 月

ATLDuck 範例由四個專案組成:atlduck、duck,以及其個別的 proxy/stub 專案:atlduckPS 和 duckPS。duck 專案會建立可以實作 IDuckInt 介面之物件的執行個體。這個介面包含四個成員函式:Flap、Paddle、Quack 和 Walk。

第二個專案 atlduck 有一個 IDuckInt 介面的連接點 (也就是說,它知道如何使用介面,但是並沒有實作該介面)。這個物件只會建立一個執行個體。一旦在兩個應用程式之間建立連接,atlduck 將會為已經呼叫 IConnectionPoint::Advise 的接收 (Sink),呼叫 IDuckInt 介面中的函式。

這個範例也會利用連接不同處理序中介面時所需要的封送處理 (Marshalling) 程式碼 (透過 atlduckPS 和 duckPS)。

ATLDuck 屬性範例是本範例的使用屬性版本。

安全性注意事項:

這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。

若要取得範例和指示以便進行安裝:

  • 按一下 Visual Studio [說明] 功能表上的 [範例]。

    如需詳細資訊,請參閱尋找範例檔案

  • 最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。

  • 您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。

建置和執行範例

若要建置這個範例

  1. 開啟 atlduck.sln 方案檔。

  2. 在 [建置] 功能表中,按一下 [建置方案]。這將會建置全部四個專案並進行必要的登錄,同時也會建立以下的檔案:

    • atlduck.exe,EXE 伺服器

    • atlduckPS.dll,atlduck.exe 伺服器的封送處理 DLL

    • duck.exe,EXE 用戶端

    • duckPS.dll,duck.exe 用戶端的封送處理 DLL

若要執行這個範例

  1. 啟動一或多個 duck.exe 的執行個體。

    注意事項:

    開啟數個 duck.exe 的執行個體就會以最有效的方式示範連接點。

  2. 會出現對話方塊。在對話方塊中,按一下 [Create DoDuck Object] 按鈕。當您按一下這個按鈕時,應用程式會建立具有 ID CLSID_DuckDoer 類別之物件的執行個體,並執行 atlduck。

  3. 由 atlduck.exe 發出的新對話方塊隨即出現。這個對話方塊會為 IDuckInt 介面中的每個函式顯示一個按鈕,以及一個具有作用中接收之連接和其 Cookie 的清單方塊。從 duck 對話方塊中,您可以選擇通知或不通知 (AdviseUnadvise) 連接點。依據您的選擇,您將會收到 (或者不會收到) 來自來源的通知。當您收到時,通知會顯示在狀態編輯欄位中。此外,當通知連接時,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 範例