我可以在本地创建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。
我该怎么办?
答案 0 :(得分:1)
您应该能够将通过调用Activator.CreateInstance创建的实例强制转换为接口。
你应该在Interop程序集中定义一个名为InfoServ.TInfoServer的接口(如果类型库为它显式定义了接口,则为ITInfoServer),如果将Activator.CreateInstance返回的对象转换为该接口,你应该看到CoClass(TInfoServerClass)公开的所有方法/属性。
答案 1 :(得分:0)
通常使用“添加引用”对话框添加对COM库的引用。然后你可以像使用任何其他类一样使用导入的类型。