這篇文章說明了如何使用 WindowS CE 6.0 系統的 DCOM ,開發 com 服務進程。向客戶端提供跨進程的 COM 組件服務,以及自定義接口代理 / 存根 dll 的建立,註冊。
假定你需要創建一個實時的控制程序,需要一直在後臺運行着,而你的客戶端卻是多個或多樣性,客戶端的開發語言不確定性。這就需要創建一個 COM 服務進程程序。
Windows CE 鏡像中需要包括 DCOM 組件服務
不幸的是由於系統空間的限制,很多基於 Windows CE 系統的 OS 都不支持 DCOM 。 需要使用 Platfom Builder 向我們的 Windows CE 鏡像中添加 DCOM 。
另外必須導出支持 DCOM API 的 Windows CE SDK 開發包。
其它的一些工具我們需要準備的註冊工具
GuiRegsvrCE.exe 用於註冊你的 COM DLLs
這類工具可以在網上搜索到
創建 COM Server
由於 Windows CE 不支持自動化列集 / 散集,因此我們需要建立自己的代理 / 存根,用與 COM Server 和 Client 之間的接口方法參數的列集與散集。當然,在 windows XP/2000 系統中,如果我們在 COM 方法中使用 OLE 兼容的數據類型,我們可以不提供代理 / 存根 DLL 。如果需要使用自定義的數據類型則都需要建立對應的代理 / 存根代碼,並註冊之後才能使用。
由於上述原因,開發 WindowsCE COM Server 時,需要將 IDL 文件 LIBRARY 塊中的 dispinterface 定義代碼移到 LIBRARY 塊外部來。所有的接口都必須在 LIBRARY 快的外部定義,這樣 MIDL 編譯器將生成恰當的代理 / 存根代碼。
注意, sink dispainterface 接口被重定義,被標識爲 dual 並從 IDispatch 接口派生。、
代理存根 DLL 的創建 Proxy/Stub
和 PC 端的代理存根的創建差不多,需要注意的是,需要定義一些宏才能編譯通過。另外定義一個 def 文件,註明要到處的函數。
編譯好以上兩個工程之後,基本上進程外 COM Server 工作算是完成了。在機器是使用是還需註冊才行。
如何調用進程外組件 ( Client 程序)
對應客戶端而已,基本上和調用進程內組件沒什麼區別了。在這裏我提供了一些輔助代碼《EventHandler.h》,協助客戶端在不使用 ATL 情況下接受 COM Server 的事件。
源代碼下載: http://download.csdn.net/source/3080188