【发布时间】:2011-08-12 17:43:54
【问题描述】:
我正在构建一个需要从 VBA 引用的库,因此我需要提供一个类型库来支持早期绑定。我见过的大多数示例都为暴露给 COM 的类定义了一个接口,例如
[Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyClass
[Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyNamespace.MyClass")]
public class MyClass : IMyClass
让一个类直接使用 ClassInterface.AutoDual 实现接口有什么缺点吗?对于更复杂的类,我喜欢使用接口来明确定义哪些成员是公开的 com,而不必在任何地方使用 ComVisible 属性。但是我也会有一些相当琐碎的数据类,比如事件参数,它们将完整地暴露给 COM。我还看到了在接口上明确设置 dispids 的示例 - 这样做有什么好处吗?
【问题讨论】:
-
请看这个问题stackoverflow.com/q/1435295/57428关于为什么你需要一个接口和
ClassInterfaceType.None。