编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> Visual C++ >> 教程正文 ATL中的集合和枚举 一
推荐位

ATL中的集合和枚举 一

中国个人站长站 Visual C++ 点击数: 更新时间:2004-8-25
         *ppUnk = NULL;

         CComObject<EnumType>* pEnum = NULL;

         HRESULT hr = CComObject<EnumType>::CreateInstance(&pEnum);

         if (FAILED(hr))

              return hr;

         hr = pEnum->Init(pUnkForRelease, collection);

         if (SUCCEEDED(hr))

              hr = pEnum->QueryInterface(ppUnk);

         if (FAILED(hr))

              delete pEnum;

         return hr;

     }

CreateSTLEnumerator()函数封装了创建CComEnumOnSTL样式的枚举器所必需的初始化和错误处理代码,我们可以这样使用该函数来完成get__NewEnum()方法:

         typedef CComEnumOnSTL<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT,

                          _Copy<VARIANT>, std::vector<CComVariant> > VarVarEnum;

         std::vector<CComVariant> m_vec;

         STDMETHOD(get__NewEnum)(IUnknown** ppUnk)

         {

              return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec);

     }

整个get__NewEnum就一条语句:

return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec);

显得干净利落。

让我们来看一个例子:

该例子的功能很简单,我们的COM组件内部有一个std::vector<VARIANT>,我需要将该vector内的数据以枚举器的形式暴露给客户端。该例子的实作步骤如下(编程环境为VS2002,也就是VC7+ATL7):

1、              建立一个新的名为ATLEnum1的解决方案,在其下添加一个新的类型为ATL项目名为ATLEnum1的项目,在项目属性设置中,取消其“属性化”选择,勾上“允许合并proxy/stub代码的复选框,点完成建立项目。

2、              切换到“类视图”,按照如下所示给该工程添加一个模板为ATL简单对象名为ATLEnum的类:

 

ATLEnum-01

 

上一页  [1] [2] [3] [4] [5] 下一页

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《ATL中的集合和枚举 一》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
广告服务 | 友情链接 | 联系我们 | 免责声明 | 用户留言 | 网站导航
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号