如何在 C# 中向 COM 对象添加功能?

How can I add functionality to COM object in c#?

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

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

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

为了将我的自定义方法添加到 ComAuto 对象,我创建了一个 class 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 时,这导致一些方法将 return 值设为 object。因此,我将不得不检查所有编写的代码以向 string 添加一些强制转换。不理想,而且我不完全了解 Embed Interop types 是什么。

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

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

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