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

时间:2016-11-30 14:04:53

标签: c# inheritance com

我是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中将ComAutoClass属性设置为Embed Interop types来直接从false继承。这导致一些方法在我已编写的代码期望object时将值返回为string。因此,我必须通过所有编写的代码向string添加一些演员表。不理想,而且我没有完全理解Embed Interop types是什么。

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

1 个答案:

答案 0 :(得分:1)

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

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