![](/img/trans.png)
[英]: 'Unable to cast COM object of type 'System.__ComObject' to interface type
[英]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.