使用ICollectionOnSTLImpl,CComEnumOnSTL模板类实现支持vb for each collection的COM

这个例子来自 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值