2016-11-30 67 views
-1

我是COM和c#的新手,我想将功能添加到由第三方程序公开的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。这导致一些方法返回值为object当我已经写的代码预计string。因此,我将不得不通过所有书面代码来添加一些演员到string。不理想,而且我也不完全了解Embed Interop types是什么。我很感激,如果任何人可以阐明这一点或指向一些有用的文章(我发现迄今为止在MSDN上听起来有点神秘,像我这样的初学者)。

+1

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

回答

1

听起来像一个完美的使用情况extension methods

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

确实!谢谢我不知道这一点。 –