【问题标题】:Creating a COM class capable of for each looping using VB.NET使用 VB.NET 为每个循环创建一个 COM 类
【发布时间】:2012-09-26 17:44:51
【问题描述】:

Excel/VBA 在我工作的组织中被广泛使用。为了让事情变得更简单,我正在开发一些在 .NET/VS2010 中广泛使用的 COM 类,以便在 VBA 中使用。

但是,我似乎无法实现支持每个循环的 COM 对象。如何实现这种行为?

指定位:

在许多情况下,我会创建一些类(我们称之为 SomeClass)和一个随附的专用集合类(我们称之为 SomeClassCollection)。在纯 .NET 中,这通常不是必需的,因为我可以简单地为通用容器创建必要的专用扩展(例如 List(Of SomeClass))。然而,在 VBA/COM 中,我需要为大多数自定义类创建一个单独的专用集合类。

对我来说,创建 SomeClassCollection COM 兼容对象的最明显方法是继承一些通用的 .NET 集合,例如List(Of SomeClass) 然后创建添加专用函数以及使基本函数和属性 COM 可见(例如 Add、Remove、Count 等)

因为我继承了一个 .NET 集合,其中每个都支持(在 .NET 中),所以我认为有可能以某种方式将此功能转移到 COM 集合类(参见工作表、工作簿等 Excel 中支持每个集合的集合)。

【问题讨论】:

    标签: vb.net excel com


    【解决方案1】:

    一般来说,您需要实现一个 COM 可见类,该类公开一个带有签名 IEnumerator GetEnumerator() 的方法,并将其标记为 DISPID 为 -4(即 DISPID_NEWENUM)

    explained in more details here

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 2011-10-22
      • 2011-10-05
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多