2012-02-07 45 views
1

我一直在嘗試一些可能變成不可能的事情。自從我進入COM領域以來已經很長時間了。從另一個進程訪問STA對象的問題

考慮兩個應用程序和一個COM STA DLL。第一個應用程序將COM STA DLL加載爲插件,並且此DLL嘗試將其自身註冊爲「全局」,以便第二個應用程序可以看到它。類似於GetObject("Excel.Application")

我試過兩種方法(可能會變成同樣的東西)。

方法1:我嘗試使用CoRegisterClassObject來註冊我的對象的STA實例。此呼叫成功與S_OK。但是如果我嘗試GetActiveObjectCoRegisterClassObject之後立即使用相同的CLSID,我會得到MK_E_UNAVAILABLE - 0x800401e3

GetActiveObject錯誤的API調用?如果沒有,爲什麼會失敗?方法2:我也嘗試過使用GetRunningObjectTable,IRunningObjectTable:RegisterCreateClassMoniker,但是當試圖從第二個應用程序中的ROT獲取對象時,我面臨另一個失敗。

我的STA DLL已正確註冊並使用typelib進行封送處理(也已註冊)。

我錯過了什麼,或者我正在嘗試做什麼?如果是後者,對我來說有沒有簡單的選擇?

回答

1

看來,當你想使用GetActiveObject你的朋友是RegisterActiveObjectRevokeActiveObject。我完全沒有。它現在完美運行!我希望這可以幫助別人。