ZIP
Télécharger le zip
Merci de laisser vos commentaires,j'ai oublier de preciser que de plus ce code posseder le style XP
oh le vilain sprintf...void __stdcall bnIpFormatStr(DWORD dwip, char *psz){ DWORD n; n = dwip >> 24; if(n < 100) *psz++ = '0'; if(n < 10) *psz++ = '0'; psz = bnultoa(n, psz); *psz++ = '.'; n = (dwip >> 16) & 0xFF; if(n < 100) *psz++ = '0'; if(n < 10) *psz++ = '0'; psz = bnultoa(n, psz); *psz++ = '.'; n = (dwip >> 8) & 0xFF; if(n < 100) *psz++ = '0'; if(n < 10) *psz++ = '0'; psz = bnultoa(n, psz); *psz++ = '.'; dwip &= 0xFF; if(dwip < 100) *psz++ = '0'; if(dwip < 10) *psz++ = '0'; bnultoa(dwip, psz);}
je vais rajouter sa. mais ne pense tu pas que cela aura une approche un peu difficile pour les debutants ?
Personne ne demande de comprendre bnultoa() comme on ne demande à personne de savoir l'implem de sprintf(), suffit de l'employer.Par contre on peut au moins coder ce mini algo de formatage qui justifie la source, sinon quel intérêt.
J'ai vérifié, le compilo avait corrigé mon truc à la va vite mais comme ce n'est pas une raison je remets la forme correcte:void __stdcall bnIpFormatStr(DWORD dwip, char *psz){ DWORD n; n = dwip >> 24; if(n < 100) { *psz++ = '0'; if(n < 10) *psz++ = '0'; } psz = bnultoa(n, psz); *psz++ = '.'; n = (dwip >> 16) & 0xFF; if(n < 100) { *psz++ = '0'; if(n < 10) *psz++ = '0'; } psz = bnultoa(n, psz); *psz++ = '.'; n = (dwip >> 8) & 0xFF; if(n < 100) { *psz++ = '0'; if(n < 10) *psz++ = '0'; } psz = bnultoa(n, psz); *psz++ = '.'; dwip &= 0xFF; if(dwip < 100) { *psz++ = '0'; if(dwip < 10) *psz++ = '0'; } bnultoa(dwip, psz);}bien sur ne tester <10 QUE si est <100.
J'avais juste une petite remarque quand au décalage de bits pour récupérer les différentes valeurs des champs, ne pourrais-tu pas utiliser une union pour ca?typedef union u_ipfield{ struct { BYTE ip0; BYTE ip1; BYTE ip2; BYTE ip3; } desc; DWORD val;} IPFIELD;Comme ca pour récupérer la valeur du controle: IPFIELD monIp;SendDlgItemMessage(Dlg,IDC_IP,IPM_GETADDRESS, 0 ,(LPARAM) &(monIp.val));et ensuite pour travailler sur les différents champs de ton ip:monIp.desc.ip0 ou monIp.desc.ip1 etc...Meme si tu n'utilises pas d'union, qu'est ce qui justifie l'utilisation de toutes ces variables globales? Normalement il n'y en a besoin d'aucune dans ton code.Pas besoin de Dlg, tu ne t'en sers que dans ta winmain, alors mets cette variable dans le winmain!Pour les autres, tu ne t'en sers que dans ta boucle de message, mets les uniquement dans ta boucle de message.
Ah si une autre remarque!Tu codes en quoi? C ou C++?Parcque le new pour créer le buffer ca ressemble (et ca fait meme plus que ressembler) à du c++ alors que le reste de ton code est en C (sauf le placement de la variable MSG en plein milieu du code).Qui plus est, on a bien un new, mais pas de delete! Attention, c'est comme un malloc sans free (en C)!
Et encore une dernière pour la route!Dans le traitement du IDCANCEL:Pourquoi un PostQuitMessage? J'aurais utilisé un DestroyWindow et dans le message WM_DESTROY, j'aurais fait à ce moment la un PostQuitMessage.Un passage de MSDN pour DestroyWindow:"The function first destroys child or owned windows, and then it destroys the parent or owner window."Voila, je crois que cette fois-ci ce sera tout. :D
merci je vais corriger tout sa dans la soiree.
"Personne ne demande de comprendre bnultoa() comme on ne demande à personne de savoir l'implem de sprintf(), suffit de l'employer.Par contre on peut au moins coder ce mini algo de formatage qui justifie la source, sinon quel intérêt."Ca me pause un probleme, j'ai du mal à utiliser une fonction que je ne comprend pas.Bien sur on a "man" ou tout autre recherche pour trouver le prototype et l'application de la fonction.Mais de la à utiliser la fonction sans la comprendre ?Je suis sur qu'avec une petite ligne de commentaire dans le code ce serait nikel ;).
bnultoa partout dans mes sources, comme ultoa() en moins idiot nettement plus rapide, retourne pointeur sur fin d'écriture.http://www.cppfrance.com/code.aspx?ID=36937dans bnIntA.h et c.char buf[40], *c;c = bnultoa(127, buf);*c++ = '-';bnultoa(25, c);etc...buf contient "127-25" sans strcat ni aucun reparcours stérile de la chaine.
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 872 579 membres 27 nouveaux aujourd'hui 16 150 membres club