我是COM和c#的新手,我想将功能添加到由第三方程序公开的COM对象。如何将功能添加到C#中的COM对象?
最初我的意图是从COM对象类继承,但我发现它并不那么直截了当(例如here)。我现在有两个接口(即IComAuto
和ComAuto
)和一个关联类(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上听起来有点神秘,像我这样的初学者)。
这里没有真正的快乐的答案,COM使用超纯基于接口的范例。使用继承仍然可以通过从ComAutoClass派生,但是当然,您不能再嵌入interop类型。有一个更多的DLL部署不是世界末日。从技术上讲,你可以自己嵌入它,使用ILSpy或Reflector等反编译器并复制/粘贴ComAutoClass。重命名它。然而,COM组件永远不会再改变是非常重要的。 –