2013-02-19 78 views
3

我已經在Delphi 2010中編寫了一個小型COM服務器,充當零售應用程序的插件。零售應用程序尋找一個「發現」接口,該接口註冊了任何數量的附加接口,每個接口調用TAutoObjectFactory.Create。這工作得很好 - 所有的插件接口按照設計工作。我發現了ComClass,現在我該如何引用它?

但現在我想從另一個接口調用一個接口的公共方法,所以我不必重複代碼。看起來很簡單,只需撥打ComClassManager.ForEachFactory尋找我需要使用的接口的ClassID。也有工作!

但是現在我發現了這個類,我被一個看似微不足道的最後一步所困惑:如何使用或投射類(或類引用?)我找到了實際調用其方法之一的方法。

在我發送到ForEachFactory的「FactoryProc」中,我假設TComObjectFactory的ComClass屬性是我所追求的,但它是TClass類型的,它是指向它指向的實際類對象的類引用至少我希望我正確理解這一點)。我對類引用有些模糊,並且我試圖轉換或以其他方式解除引用此屬性導致訪問衝突或編譯器錯誤。

有什麼建議嗎?

+0

我開始懷疑ComClassManager是否有一個類引用列表,但沒有在運行時創建的實際對象列表。也許這就是爲什麼當我嘗試使用ComClass作爲對象時,我一直在訪問違規。它被稱爲「ComClassManager」而不是ComObjectManager ... – 2013-02-19 17:56:44

回答

3

您在評論中是正確的,ComClassManager涉及類而不是實例。你需要的是(你的應用程序本地實現)running object table(或類似的東西),所以插件實例可以相互交互。

如何真正實現它取決於你真正需要什麼,例如,調用所有正在運行的實例上的方法,或者僅調用特定類的實例。

+0

謝謝,這很有道理。並感謝鏈接到運行對象表 - 很好的資源! – 2013-02-20 19:31:04

相關問題