2010-04-30 59 views
2

我目前正在使用COM自動化應用程序,並且如果在應用程序運行時原始應用程序已經打開,任何使用我的應用程序的人都有問題。我知道如何確定流程是否開放,但不必擔心關閉流程或解決流程等問題,我想嘗試使用現有的應用程序,而不是打開新的應用程序。通過Windows進程句柄訪問COM對象

這是我常在我的自動化程序啓動應用程序:

Designer.Application desApp = new Designer.Application(); 

現在我試圖嘗試從現有的應用程序中使用手柄:

Designer.Application desApp = (Designer.Application)((System.Diagnostics.Process.GetProcessesByName("Designer.exe")[0]).Handle) 

(我知道這是行不通的,因爲.Handle返回一個IntPtr,但我用它作爲例子。)

有什麼方法可以完成這個?如果我知道句柄/過程,如何返回可用對象?

回答

2

您不能在客戶端代碼中完成這項工作,它必須在服務器中處理。服務器必須調用CoRegisterClassObject(),傳遞REGCLS_MULTIPLEUSE,以便允許多個客戶端使用單個服務器實例。沒有其他機制允許客戶端獲得指向Application對象的接口指針。

這是非常設計,服務器必須設計和編寫,以支持這種用法。它以後不能用螺栓固定。