【发布时间】:2017-04-14 21:32:30
【问题描述】:
我是 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 继承。当我已经编写的代码需要 string 时,这导致某些方法将值返回为 object。因此,我必须通过所有编写的代码来向string 添加一些演员表。不理想,而且我对Embed Interop types是什么也没有完全了解。
如果有人能对此有所了解或指出一些有用的文章,我将不胜感激(到目前为止,我在 MSDN 上发现的内容对于像我这样的初学者来说听起来有点神秘)。
【问题讨论】:
-
这里没有真正快乐的答案,COM 使用基于超纯接口的范例。通过从 ComAutoClass 派生仍然可以使用继承,但可以肯定的是,您不能再嵌入互操作类型。再部署一个 DLL 并不是世界末日。从技术上讲,您可以自己嵌入它,使用 ILSpy 或 Reflector 之类的反编译器并复制/粘贴 ComAutoClass。重命名它。然而,COM 组件永远不会再改变是绝对关键的。
标签: c# inheritance com