2009-11-02 3 views
3

Je tente de créer un CList avec un pointeur intelligent COM (une des classes wrapper générées pour _com_ptr_t) comme paramètre de modèle:Est-il possible d'utiliser des pointeurs intelligents COM avec la collection CList

CList<IDispatchPtr, IDispatchPtr> list; 

Cependant, je reçois plusieurs erreurs de compilation similaires à:

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

Il compile lors de l'utilisation des pointeurs réguliers :

CList<IDispatch*, IDispatch*> list; 

En regardant le code MFC qui appelle SerializeElements il semble que le problème est qu'il faut un * TYPE et il n'y a pas de conversion entre IDispatch** and IDispatchPtr*. Y at-il un moyen de contourner cela?

Répondre

5

En raison de la façon dont operator& est surchargée, vous devez envelopper les pointeurs intelligents dans CAdapt<>:

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