2012-02-10 76 views
2

我遇到了一些我正在編寫的.NET組件的問題,這些問題旨在暴露給COM。COM互操作性和繼承

要公開的類從基類繼承,這兩個類都將ComVisible屬性設置爲true。基類沒有什麼特別 - 它包含2個屬性,我用它來幫助抽象一些數據庫代碼。

我可以註冊程序集並鍵入lib就好了。然而,當我試圖將類實例,我得到以下異常從被叫拋出:

錯誤IDispatch.Invoke():0x80020101

我決定來調試它在CScript.exe中,我得到了同樣的錯誤。所以我重寫了沒有基類的類,現在我可以創建沒有問題的實例。

爲了公開從同一命名空間中的另一個.NET類繼承的.NET類,我需要做額外的工作嗎?

+0

基類是否在同一個DLL中? – Stu 2012-02-10 22:01:01

+0

如果使父類不可見,會發生什麼情況。 – Chriseyre2000 2012-02-10 22:01:54

+0

有一件令人沮喪的事情是,在EventViewer中似乎沒有任何日誌信息;它剛剛死亡。另外,我在第一次嘗試時沒有在基類中指定ComVisible,它仍然導致相同的錯誤(它實際上在VS2010調試器中顯示爲「未知錯誤」,但我知道基於應用程序調用拋出的異常的內容該類) – 2012-02-10 22:17:08

回答

3

您不能在腳本語言中直接使用派生接口。腳本引擎僅支持實現單個界面的coclass,即默認界面。或者換句話說,像vbscript或jscript這樣的腳本語言不是支持多繼承的面向對象的語言。解決方法是將方法添加到默認接口,該接口返回對第二個接口的引用。不常用的做法是,保持簡單是腳本中的樣板。

+0

感謝Hans ......這是有道理的,因爲這不僅在CScript中調用失敗,而且在調用軟件中也失敗了,因爲它使用VBScript創建類實例。 – 2012-02-11 12:45:29