Utilisation d'un reinterpret_cast ? [Résolu]

Signaler
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
17 avril 2013
-
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010
-
Bonjour,

J'ai un petit soucis de conversion, voici mon problème :

CString m_tempsminz1;
unsigned long int Zone1; // de 0 à FF FF FF
unsigned long int Zone2; // de 0 à FF FF FF
unsigned long int CalcZones
CalcZones = (Zone1+Zone2);

CProgressCtrl *pProgressz1 =static_cast<CProgressCtrl *>(GetDlgItem(IDC_PROGRESSZ1));
CProgressCtrl *pProgressz2 =static_cast<CProgressCtrl *>(GetDlgItem(IDC_PROGRESSZ2));

pProgressz1->SetRange(0, CalcZones);
pProgressz1->SetPos(Zone1);

Les soucis :

warning C4244: 'argument' : conversion de 'unsigned __int64' en 'short', perte possible de données
error C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : impossible de convertir le paramètre 1 de 'const char [3]' en 'const wchar_t *'
with
[
BaseType=wchar_t,
StringTraits=StrTraitMFC_DLL<wchar_t>
]
Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction

Quels solutions me proposez vous pour résoudre le warning et l'erreur ?

Cordialement
Romain
A voir également:

4 réponses

Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

Pour ton warning et vu la taille de tes variables (> taille d'un short) je te conseille d'utiliser plutôt la méthode SetRange32() comme suit :

pProgressz1->SetRange32(0, (int)CalcZones); // warning C4244

Cela réglera ton warning.

De plus, encore en me basant sur le code que tu as écrit je te conseillerai plutôt de faire des déclarations en int comme suit :

int Zone1; // de 0 à FF FF FF
int Zone2; // de 0 à FF FF FF
int Zone3; // de 0 à FF FF FF
(la somme des 3 valeurs max sera au pire de 02 FF FF FD qui tient aussi sur un (int) donc pas de problème a priori.

De cette manière tu n'auras même plus besoin de caster ton paramètre en (int) lors de l'appel à SetRange32(...)



++
Mess with the best, die like the rest
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Utilise par ordre de préférence les casts suivants:
- static_cast
- reinterpret_cast
- C cast

Je ne peux pas t'aider plus, je ne suis pas calé sur les MFC.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

Question : quand appelles tu la méthode "Format" ? Cela n'apparait pas sur ton code.

Essaie d'etre précis sur les lignes incriminées par le warning et l'erreur sinon on va pas s'en sortir.

Pour ton erreur en tout cas lors de l'appel à Format(...) tu as juste à entourer ta chaine de caractères passée en premier argument par la macro TEXT(...) (ex : TEXT("%d"))

OU

tu rajoutes un L juste devant la même chaine de caractères (ex : L"%d") et ton erreur sera réglée.

Pour le warning, merci d'indiquer la ligne incriminée (idem pour l'erreur histoire de confirmer ce que je viens de dire)

++
Mess with the best, die like the rest
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
17 avril 2013

Le problème de l'erreur est résolue merci !!

Et maintenant pour le warning :

unsigned long int Zone1; // de 0 à FF FF FF
unsigned long int Zone2; // de 0 à FF FF FF
unsigned long int Zone3; // de 0 à FF FF FF

CalcZones = Zone1+Zone2+Zone3;

pProgressz1->SetRange(0, CalcZones); // warning C4244

warning C4244: 'argument' : conversion de 'unsigned __int64' en 'short', perte possible de données

Cordialement
Romain