这个例子来自 http://msdn.microsoft.com/zh-cn/library/s8cb31f2.aspx
如果安装了vc9, 源代码可在C:\Program Files\Microsoft Visual Studio 9.0\Samples\1033\AllVCLanguageSamples.zip下的ATLCollections工程里看到
实现原理可在atl internals第8章-collections and enumerators看到
vb的collection对应的com接口需要继承自IDispatch,并且必须含有属性 Count, Item 及_NewItem
vb访问collection有两种方法, 第一种是
for i = 1 to wordObj.count
's = s & wordObj.item(i) & " "
s = s & wordObj(i) & " "
next
这种方法会调用com的Count, Item 属性
第二种为
for each word in wordObj
s = s & word & " "
next
这种方式会调用_NewItem生成一个IEnumXX对象, 而该对象也需要继承自IDispatch,并且有Next, Skip, Reset, Clone之类的方法
atl对这两个类做了包装以便于将stl的容器转换为vb vollection, 其中collection对应ICollectionOnSTLImpl, enumerator对应CComEnumOnSTL