DispSink 屬性範例:經由分派介面處理由單一 COM 伺服器所引發的事件
更新:2007 年 11 月
DispSink 屬性範例示範擁有自己雙重介面和用來引發事件的分派介面的單一伺服器物件 (這是一個只能有一個執行個體的物件)。
DispSink 範例是本範例的未使用屬性版本。
注意事項: |
---|
部分範例 (包括本範例) 尚未經過改寫,無法反映出目前在 Visual C++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。 |
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得安裝這些程式碼的範例和指示:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
Visual Studio 2008 範例網頁 中提供最新版本的範例完整清單。
您也可以在電腦硬碟中找到範例。根據預設,範例和一個讀我檔案會複製到 \Program Files\Visual Studio 9.0\Samples\ 底下的資料夾中。Visual Studio Express 版本的所有範例都在網路上。
建置和執行範例
若要建置和執行這個範例
開啟 DispSink.sln 方案檔。
在 [建置] 功能表中,按一下 [建置方案]。
開啟 ActiveX 控制項測試容器的兩個或多個執行個體,然後將 DispCtl 用戶端控制項插入至每個執行個體中。如需測試容器存取方法的詳細資訊,請參閱使用測試容器測試屬性和事件。
在所有的控制項上叫用 Connect 方法。
在其中一個控制項上叫用 Send 方法。將 [叫用方法] 對話方塊的 [參數型別] 欄位變更為 VT_BSTR,然後在 [參數值] 方塊中輸入任何字串。按一下 Invoke 按鈕。字串會顯示在所有連接控制項的中央。
刪除之前,在所有的控制項上叫用 Disconnect 方法。
範例如何操作
伺服器是擁有自己雙重介面以及用來引發事件的分派介面的單一物件。分派介面是放置在使用 dispinterface 屬性的 .idl 檔中。伺服器物件會透過它的雙重介面 Send 方法接收資料並透過分派介面上的 Transfer 事件傳輸至所有連接的元件。Dispserver 是使用 event_source 屬性,而 Dispclient 則是使用 event_receiver 屬性。
用戶端是一個含有伺服端物件的 ActiveX 控制項。控制項會回應由伺服端物件所引發的 Transfer 事件。它擁有有一個具有 Connect、Send 和 Disconnect 方法的雙重介面。如果 Transfer 事件是使用一個含有 BSTR 的 Variant 所引發的,則該字串將會顯示在控制項的中央。
屬性
本範例使用下列屬性:
DISPSINK/DispClient coclass, dual, event_receiver, helpstring, id, module, object, pointer_default, registration_script, threading, uuid, version, vi_progid
DISPSINK/DispServer coclass, default, dispinterface, dual, event_source, helpstring, id, module, object, pointer_default, threading, uuid, vi_progid
關鍵字
本範例使用下列關鍵字:
#import; CComAutoThreadModule; CComSimpleThreadAllocator; CoCreateInstance; DECLARE_CLASSFACTORY_AUTO_THREAD; FireViewChange