如何从COM对象调用方法(不能将System .__ ComObject强制转换为我的COM类)

时间:2012-03-05 13:37:07

标签: c# com

我可以在本地创建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并执行的COM组件   不支持IProvideClassInfo或没有任何interop程序集   registered将包装在__ComObject类型中。实例   type不能转换为任何其他类;但是他们可以被投射到   接口只要底层的COM组件支持   QueryInterface调用接口的IID。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您应该能够将通过调用Activator.CreateInstance创建的实例强制转换为接口。

你应该在Interop程序集中定义一个名为InfoServ.TInfoServer的接口(如果类型库为它显式定义了接口,则为ITInfoServer),如果将Activator.CreateInstance返回的对象转换为该接口,你应该看到CoClass(TInfoServerClass)公开的所有方法/属性。

答案 1 :(得分:0)

通常使用“添加引用”对话框添加对COM库的引用。然后你可以像使用任何其他类一样使用导入的类型。