是否可以将COM智能指针与CList集合一起使用

时间:2009-11-02 23:15:12

标签: c++ mfc

我正在尝试使用COM智能指针(为_com_ptr_t生成的包装类之一)创建一个CList作为模板参数:

CList<IDispatchPtr, IDispatchPtr> list;

但是我得到了几个类似于:

的编译错误
  

error C2664: 'void __stdcall SerializeElements(class CArchive &,class _com_ptr_t<class _com_IIID<struct IDispatch,&struct __s_GUID _GUID_00020400_0000_0000_c000_00000000004 6> > *,int)' : cannot convert parameter 2 from 'struct IDispatch ** ' to 'class _com_ptr_t<class _com_IIID<struct IDispatch,&struct __s_GUID _GUID_00020400_0000_0000_c000_000000000046> > *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

使用常规指针时编译:

CList<IDispatch*, IDispatch*> list;

查看调用SerializeElements的MFC代码,看起来问题是它需要TYPE *并且IDispatch** and IDispatchPtr*之间没有转换。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:5)

由于operator&被重载的方式,您需要将智能指针包装在CAdapt<>中:

CList<CAdapt<IDispatchPtr>, CAdapt<IDispatchPtr> > list;