Utilisation d'un reinterpret_cast ? [Résolu]

romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 15 avril 2010 à 10:23 - Dernière réponse : theneoiceman 78 Messages postés lundi 14 avril 2003Date d'inscription 23 avril 2010 Dernière intervention
- 16 avril 2010 à 14:20
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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
theneoiceman 78 Messages postés lundi 14 avril 2003Date d'inscription 23 avril 2010 Dernière intervention - 16 avril 2010 à 14:20
3
Merci
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

Merci theneoiceman 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de theneoiceman
cptpingu 3794 Messages postés dimanche 12 décembre 2004Date d'inscription 10 juin 2018 Dernière intervention - 15 avril 2010 à 11:11
0
Merci
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]
Commenter la réponse de cptpingu
theneoiceman 78 Messages postés lundi 14 avril 2003Date d'inscription 23 avril 2010 Dernière intervention - 16 avril 2010 à 12:39
0
Merci
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
Commenter la réponse de theneoiceman
romain60112 70 Messages postés mercredi 1 octobre 2008Date d'inscription 17 avril 2013 Dernière intervention - 16 avril 2010 à 13:37
0
Merci
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
Commenter la réponse de romain60112

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.