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

.NET: Make an object and all of its subordinate objects COM visible

我有一个带有 class 的专有程序集,它需要 COM 可见,以便我可以将它用于其他(非 .NET)应用程序。

想象这样一个 class:

public class CProprietary
{
    public CProprietary2 oSubItem;
}

public class CProprietary2
{
}

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

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

现在我可以通过 COM 使用基础 class (CProprietary),但是从属 class (CProprietary2) 的对象仍然 returned 非 COM 可见访问 CComVisibleProprietary.oSubItem.

所以我的问题是我需要一种方法来自动包装 class 及其所有子 classes。或者有什么简单的方法可以将 ComVisible 属性继承给子 classes? 这些专有的一些属性 class 也是 return .NET 的对象,例如 System.Windows.Forms.ListBox.ObjectCollection,因此它们不属于同一个命名空间。

'automation view' 中的正确方法是为每个嵌入对象 (CProprietary2) 创建自己的对象。每个嵌入对象都可以通过在主对象 (CProprietary) 中使用 属性 并将接口返回到嵌入对象来访问。

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

VBScript中的语法,当prop是CPropriatary类型时,你可能会这样访问子项。

prop.oSubItem.DoSomething