簡體   English   中英

如何從COM對象調用方法(無法將System .__ ComObject強制轉換為我的COM類)

[英]How to call methods from COM object (cannot cast System.__ComObject to my COM class)

我可以在本地創建COM對象

var infsrv = new InfoServ.TInfoServerClass(); //COM object
infsrv.RunBsScript(bssScriptName, strOfParam); //calling method

但是我需要在服務器上創建COM對象,因此代碼是:

var myGuid = new Guid("00C4261D-0B2B-4230-A2CA-A9F4F2A46452");
var myType = Type.GetTypeFromCLSID(myGuid, servername);
InfoServ.TInfoServerClass infsrv = (InfoServ.TInfoServerClass)Activator.CreateInstance(myType);
infsrv.RunBsScript(bssScriptName, strOfParam);

但現在它說:

無法將類型為“ System .__ ComObject”的COM對象轉換為類類型為“ InfoServ.TInfoServerClass”。 進入CLR且不支持IProvideClassInfo或未注冊任何互操作程序集的COM組件將被包裝為__ComObject類型。 此類型的實例不能轉換為任何其他類; 但是,只要基礎COM組件支持對接口IID的QueryInterface調用,就可以將它們強制轉換為接口。

我該怎么辦?

您應該能夠將通過對Activator.CreateInstance的調用創建的實例轉換為接口。

您應該在Interop程序集中定義一個名為InfoServ.TInfoServer的接口(如果類型庫為它明確定義了一個接口,則應該為ITInfoServer),並且如果將Activator.CreateInstance返回的對象轉換為該接口,則應該看到所有CoClass(TInfoServerClass)公開的方法/屬性。

通常,您使用“添加引用”對話框來添加對COM庫的引用。 然后,您可以像使用其他任何類一樣使用導入的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM