2012-08-08 28 views
0

我繼承了一個由爲數衆多的通信使用COM和EXE的COleDispatchDriver文件的應用程序。有一個主要的「客戶端」exe文件和幾個提供服務的「服務器」可執行文件。的COleDispatchDriver與特定的EXE作爲COM服務器

目前,客戶端進程開始使用的COleDispatchDriver :: CreateDispatch()的服務器,通過該得到解決一類ID的應用程序ID。問題在於它依賴於正在註冊的COM服務器(一個潛在的故障點)。如果機器上有多個不同版本的COM服務器,它也會有問題。

我想使這個不那麼脆弱,而無需完全重新構建在這一點上的應用。有沒有辦法保持相同的通信機制,但明確啓動特定的服務器應用程序?客戶端知道服務器應用程序的位置以及它們的名稱(它們位於同一目錄中的客戶端旁邊)。

回答

1

這是一個有點比較麻煩,但你可以手動元帥,你需要自己的接口。讓客戶端啓動創建客戶端對象的服務器,並使用CoMarshallInterface()將其接口重新發送回客戶端。

一旦客戶端編組你應該能夠得到一個IDispatch接口的保持與單純的QueryInterface的調用接口。