BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 janv. 2007 à 17:50
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=36937 dans 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.
decize
Messages postés4Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention 2 janvier 2007 2 janv. 2007 à 17:29
"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 ;).
wxccxw
Messages postés755Date d'inscriptionsamedi 15 mai 2004StatutMembreDernière intervention30 janvier 2011 2 janv. 2007 à 15:43
merci je vais corriger tout sa dans la soiree.
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 2 janv. 2007 à 11:49
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
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 2 janv. 2007 à 11:44
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)!
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 2 janv. 2007 à 11:39
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?
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.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 janv. 2007 à 23:41
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.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 janv. 2007 à 23:36
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.
wxccxw
Messages postés755Date d'inscriptionsamedi 15 mai 2004StatutMembreDernière intervention30 janvier 2011 1 janv. 2007 à 23:30
je vais rajouter sa. mais ne pense tu pas que cela aura une approche un peu difficile pour les debutants ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 janv. 2007 à 23:13
2 janv. 2007 à 17:50
http://www.cppfrance.com/code.aspx?ID=36937
dans 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.
2 janv. 2007 à 17:29
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 ;).
2 janv. 2007 à 15:43
2 janv. 2007 à 11:49
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
2 janv. 2007 à 11:44
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)!
2 janv. 2007 à 11:39
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.
1 janv. 2007 à 23:41
{
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.
1 janv. 2007 à 23:36
Par contre on peut au moins coder ce mini algo de formatage qui justifie la source, sinon quel intérêt.
1 janv. 2007 à 23:30
1 janv. 2007 à 23:13
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);
}
1 janv. 2007 à 22:25
j'ai oublier de preciser que de plus ce code posseder le style XP