首页 > 解决方案 > 使用 ATL 进行 COM 枚举时按需获取数据

问题描述

使用CComEnum / CComEnumOnSTL 类在 C++ ATL 中进行枚举相对容易。

这些类的问题是您必须在迭代之前将数据存储在数组或列表中。这对我们来说是不可能的,因为检索列表的所有数据非常耗时,因此我们不想从底层系统中获取不必要的信息。此外,我们的 COM 接口的使用者通常不会迭代整个列表。

这个想法是IEnumXXXX接口的实现有一个指向列表中当前条目的指针。如果消费者想要列表中的下一个条目,它会搜索下一个条目并返回该条目的内容(是的,底层系统可以在许多层面上进行改进,但现在就是这样)

所以我的问题是,是否有任何使用 ATL 实现IEnumXXXX的好方法,其中从迭代开始就无法知道完整的数组。或者我是否必须为每个正在处理的列表(相当多的列表)实现一个IEnumXXXX

标签: c++comatl

解决方案


推荐阅读