Bonjour,
Sur du code legacy, il y a une manipulation de pointeur qui se trouve être particulièrement moche :
Dans un optique de passage en 64 bits, il y a eu une correction rapide apporté et test sur une machine AIX :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Enregistrement du pointeur sous forme de chaine de caractère avec d'autres choses avant sprintf(sDescReq,"%s*%i",_sName,(int)Desc); //Récupération de la partie pointeur de la chaine de caractère // Note : Toujours pas compris l'utilité du +1 ici sTempo = strrchr(sDescReq,'*')+1; // Conversion barbare de la chaine de caractère en pointeur de truc. Desc = (SQLDA *)atoi(sTempo);
Il se trouve que ce version ne fonctionne pas sous Windows. Car, le %L de rajoute rien dans la chaine de caractère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Enregistrement du pointeur sous forme de chaine de caractère avec d'autres choses avant sprintf(sDescReq,"%s*%L",_sName,(long)Desc); //Récupération de la partie pointeur de la chaine de caractère // Note : Toujours pas compris l'utilité du +1 ici sTempo = strrchr(sDescReq,'*')+1; // Conversion barbare de la chaine de caractère en pointeur de truc. Desc = (SQLDA *)atol(sTempo);
Note : Je suppose que %L n'est pas reconnu par le compilateur Windows (32 bits) de la même manière que le compilateur AIX (32bits ou 64 bits)
J'ai fait un peu de recherche et je suis tombé sur une solution qui fonction pour Windows 32 bits qui utilise %lld Cependant, cela ne fonctionne pas sous AIX![]()
Il m'est totalement possible de faire un #ifdef en fonction de l'OS ciblé, mais pas envie !
Je sais que l'ensemble est basé sur un principe à la *** et que l'implémentation n'est de toute façon pas valable. Je suppose que le plus logique serai d'utiliser %p. Mais, cela transcrit le pointeur en hex et je ne sais pas comment reconvertir cela en un pointeur propre de manière simple.
Donc, si vous avez une manière de rendre ce stockage d'adresse de pointeur plus propre et compatible AIX/Windows 32/64 bits, je prends !
Cordialement,
Patrick Kolodziejczyk.
Partager