【问题标题】:How can I add functionality to COM object in c#?如何在 C# 中向 COM 对象添加功能?
【发布时间】:2017-04-14 21:32:30
【问题描述】:

我是 COM 和 c# 的新手,我想向第三方程序公开的 COM 对象添加功能。

最初我的意图是从 COM 对象类继承,但我发现它并不是那么简单(例如 here)。

目前,我有两个接口(即IComAutoComAuto)和一个关联类(ComAutoClass)。

为了将我的自定义方法添加到ComAuto 对象,我创建了一个类ComObjectWrapper,它继承自该接口并通过将ComAuto 对象存储在私有字段中来实现它。

class ComObjectWrapper : ComAuto
{
    private readonly ComAuto ComObj;

    public ComObjectWrapper() : base()
    {
        ComObj = new ComAuto();
    }

    public short method1(object param)
    {
        return ComObj.method1(param);
    }
    ...
}

我觉得这不是最好的方法,因为我需要将任何对原始方法的调用重定向到内部 ComAuto 对象。

我尝试通过在 VS2015 中将Embed Interop types 属性设置为false 直接从ComAutoClass 继承。当我已经编写的代码需要 string 时,这导致某些方法将值返回为 object。因此,我必须通过所有编写的代码来向string 添加一些演员表。不理想,而且我对Embed Interop types是什么也没有完全了解。

如果有人能对此有所了解或指出一些有用的文章,我将不胜感激(到目前为止,我在 MSDN 上发现的内容对于像我这样的初学者来说听起来有点神秘)。

【问题讨论】:

  • 这里没有真正快乐的答案,COM 使用基于超纯接口的范例。通过从 ComAutoClass 派生仍然可以使用继承,但可以肯定的是,您不能再嵌入互操作类型。再部署一个 DLL 并不是世界末日。从技术上讲,您可以自己嵌入它,使用 ILSpy 或 Reflector 之类的反编译器并复制/粘贴 ComAutoClass。重命名它。然而,COM 组件永远不会再改变是绝对关键的。

标签: c# inheritance com


【解决方案1】:

听起来像是extension methods 的完美用例:

public static class ComAutoExtensions
{
    public static short Method1( this ComAuto com, object param )
    {
        return com.GetShortValue( param );
    }
}

【讨论】:

  • 确实如此!谢谢,我不知道。
猜你喜欢
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多