2012-03-05 68 views
0

我可以創建COM對象本地如何調用COM對象的方法(不能施放系統.__ ComObject我的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); 

但現在它說:

無法投型 '系統.__ ComObject' 的COM對象類類型 「InfoServ.TInfoServ erClass'。 COM組件進入CLR並且 不支持IProvideClassInfo,或者沒有任何互操作程序集註冊的組件 將被包裝在__ComObject類型中。此 類型的實例不能轉換爲任何其他類;但只要底層COM組件支持 QueryInterface調用接口的IID,它們就可以轉換爲 接口。

我該怎麼辦?

回答

1

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

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

0

通常您使用「添加引用」對話框來添加對COM庫的引用。然後你可以像使用任何其他類一樣使用導入的類型。

相關問題