【问题标题】:How to call methods from COM object (cannot cast System.__ComObject to my COM class)如何从 COM 对象调用方法(不能将 System.__ComObject 转换为我的 COM 类)
【发布时间】:2012-03-22 23:30:25
【问题描述】:

我可以在本地创建 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 或没有任何互操作程序集 注册将被包装在 __ComObject 类型中。这方面的事例 类型不能转换为任何其他类;但是它们可以转换为 只要底层 COM 组件支持的接口 QueryInterface 调用接口的 IID。

我该怎么办?

【问题讨论】:

    标签: c# com


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-02-02
        • 2018-06-05
        • 2018-06-20
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-20
        相关资源
        最近更新 更多