【发布时间】:2018-03-08 21:35:34
【问题描述】:
我有一个带有类的专有程序集,它需要是 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,因此它们不属于同一个命名空间。
【问题讨论】:
-
你有 [assembly:ComVisible(true)] 属性(在 AssemblyInfo.cs 中)吗?见stackoverflow.com/questions/15688395/…
-
使用 [ClassInterface] 并不是一个很好的暴露成员的方法。 COM 使用基于超纯接口的范例。 [ClassInterface] 很方便,它从类声明中合成一个接口,但是不可见的保持不可见。总是倾向于显式声明一个公共接口,给它 [ComVisible] 属性。好的原因有很多,一个是它可以解决您的问题。您现在可以包含由基类实现的属性和方法。
-
@Cal279:AssemblyInfo.cs 中的 ComVisible 没有帮助。 :(
-
@HansPassant:我应该如何在不使用 ClassInterface 的情况下使属性类 COM 可见?我想我需要创建一个包含所有属性和方法的副本的接口吗?我不赞成这样做。
-
机器不太在乎你喜欢什么,考虑做你需要做的事情让它工作。不排除发送该电子邮件以要求作者为您做这件事。
标签: c# .net com activex comvisible