.NET:使对象及其所有从属对象COM可见

时间:2017-09-27 11:51:36

标签: c# .net com activex comvisible

我有一个带有类的专有程序集,需要COM可见,因此我可以将它与其他(非.NET)应用程序一起使用。

想象一下这样的课程:

public class CProprietary
{
    public CProprietary2 oSubItem;
}

public class CProprietary2
{
}

这些类是专有的,不是COM可见的。我没有它们的源代码。作为当前的解决方案,我正在创建自己的程序集,它提供了一个继承的COM可见类。

[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class CComVisibleProprietary : CProprietary
{
}

现在我可以通过COM使用基类(CProprietary),但是当访问CComVisibleProprietary.oSubItem时,从属类(CProprietary2)的对象仍然返回非COM可见。

所以我的问题是我需要一种方法来自动包装一个类及其所有子类。或者有没有简单的方法将ComVisible属性继承到子类? 这些专有类的某些属性也返回.NET的对象,如System.Windows.Forms.ListBox.ObjectCollection,因此它们不属于同一名称空间。

1 个答案:

答案 0 :(得分:0)

自动化视图中的正确方法'将为每个嵌入对象创建自己的对象(CProprietary2)。可以使用主对象中的属性(CProprietary)访问每个嵌入对象,并将接口返回到嵌入对象。

但是没有自动的方式来实现这个目标。您必须为所有对象提供相应的接口。

VBScript中的语法,当prop是CPropriatary类型时,您可以通过这种方式访问​​子项。

prop.oSubItem.DoSomething