Je viens de convertir un projet Visual 2003 en 2005.
Le projet compilait sans problème sous visual 2003.
Après conversion, j'ai l'erreur suivante

c:\program files\microsoft visual studio 8\vc\atlmfc\include\atlcom.h(5017) : error C2664: '_CopyVarMapToVariant::copy'*: impossible de convertir le paramètre 2 de 'const std::pair<_Ty1,_Ty2> *' en 'std::pair<_Ty1,_Ty2> *'
with
[
_Ty1=const ATL::CAdapt<ATL::CComVariant>,
_Ty2=ATL::CComVariant
]
La conversion perd les qualificateurs
c:\program files\microsoft visual studio 8\vc\atlmfc\include\atlcom.h(5004)*: lors de la compilation de la fonction membre '<Inconnu>' de la classe <Inconnu>
c:\dev\components\msconfig\com\fielditem.h(20)*: voir la référence à l'instanciation de la classe modèle 'ATL::IEnumOnSTLImpl<Base,piid,T,Copy,CollType>' en cours de compilation
with
[
Base=IEnumVARIANT,
piid=& IID_IEnumVARIANT,
T=VARIANT,
Copy=_CopyVarMapToVariant,
CollType=VarMap
]
La classe qui semble poser problème est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef __Enumtypes__HH__
#define __Enumtypes__HH__
 
#include <map>
 
typedef std::map<CAdapt<CComVariant>, CComVariant> VarMap;
 
class _CopyVarMapToVariant
	{
	public:
		static HRESULT copy(VARIANT* pCopy, std::pair<const CAdapt<CComVariant>, CComVariant>* pIt)
		{
			CComVariant v = pIt->second;
			v.Detach(pCopy);
			return S_OK;
		}
		static void init(VARIANT* p) {VariantInit(p);}
		static void destroy(VARIANT* p) {VariantClear(p);}
	};
 
typedef IEnumOnSTLImpl<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _CopyVarMapToVariant, VarMap> VarEnumImpl;
 
#endif
Une idée??