Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 13 oct. 2004 à 23:27
Merci, voila, c'est fait ! autre chose ? :-))
@++ et merci! :)
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 13 oct. 2004 à 22:11
OK, ça copie bien le zéro terminal, mais supposons qu'un utilisateur insert un char* sans son zéro terminal, il y a de bonnes chances qu'il fasse planter sauvagement l'application ! (strlen renverra un résultat erroné). C'est une petite sécurité qu'il est indispensable de mettre ...
++
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 oct. 2004 à 21:50
lstrcpy copie bien le terminateur NULL mais tant qu'on n'est pas en UNICODE, strcpy fera aussi bien l'affaire.
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 13 oct. 2004 à 21:37
tu as oublié :
delete[ ] m_nom;
rename est encore vulnérable. Comme je te l'ai dis dans le post précédent, il faut désallouer m_nom, puis réallouer la taille correcte, et enfin copier.
Je ne connais pas la fonction lstrcpy (non standard), mais je ne suis pas sur qu'elle copie aussi le caractère terminal '\0' ... Dans ce cas, il faut l'ajouter :
m_nom[strlen(m_nom)] = '\0'; (apres avoir allouer bien sur !)
voila, voila !
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 13 oct. 2004 à 20:50
Voila c'est modifié !
Pour le bidule qui consiste a faire passer la window en first plan, je suis en cours d'étude de ta source! lol, en fait, je viens de débuter en prog Win32 dc c nouvo pr moi! :-))
Sinan, apres tout, si l'utilisateur n'est pas si noob, suffit qu'il voit en bas, dans la barre des taches, la new window ouverte! puis il clique dessus et hop! :-))
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 13 oct. 2004 à 20:25
Ah vi! lol, merci plus_plus_fab! mdr! javé mem pas callé la possibilité d'owerflow! mais bon, en regle générale, je m'amuse pas a creer des Mutex de +de 100 caractères! lol! Mais ce n'est pas une raison, tu as bien raison de me le rappeler, je vais corriger ça!
BruNews, grand merci pour ton aide que tu me donnes chaque fois que j'ai un problême!
@+ tout le monde et merci de vos comment' ! :-))
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 13 oct. 2004 à 20:05
salut,
quelques petites remarques, si je peux me permettre ...
il ya une faille de sécurité dans le constructeur CMutex::CMutex(char *nom)
recuperella taille de nom, alloue dynamiquement de l'espace pour this->nom (la longueur de nom + 1 pour le zero terminal).
meme chose pour rename, desalloue, recupere la taille du nouveau "nom", puis realloue ...
il y a une fuite dans le destructeur, si tu alloues par new[ ], il faut desallouer par delete [ ] !
Si tu fais du C++, il faut te passer du char*, et utiliser std::string à la place, ça évite ces erreurs plutot embetantes ;-)
Pour la conception objet, nom devrait etre private, et
bool ActiveMutex();
void DesactiveMutex();
devraient etre déclarées const (elles ne modifient rien)
-> bool ActivateMutex()const;
bonne continuation ...
@+
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 oct. 2004 à 19:19
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 13 oct. 2004 à 19:10
Euh, d'accord, merci, mais comment tu fais pour faire ne sorte que l'appli se foute au premier plan ?
Oui, la MessageBox, c juste pr le signaler à l'utilisateur, c tt :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 oct. 2004 à 19:01
Salut,
il faut respecter le comportement standard sous Windows, le client qui lance son prog par raccourci ou autre doit le retrouver au 1er plan sinon il risque d'insister un bon moment. Le messageBox est inutile par contre.
13 oct. 2004 à 23:27
@++ et merci! :)
13 oct. 2004 à 22:11
++
13 oct. 2004 à 21:50
13 oct. 2004 à 21:37
delete[ ] m_nom;
rename est encore vulnérable. Comme je te l'ai dis dans le post précédent, il faut désallouer m_nom, puis réallouer la taille correcte, et enfin copier.
Je ne connais pas la fonction lstrcpy (non standard), mais je ne suis pas sur qu'elle copie aussi le caractère terminal '\0' ... Dans ce cas, il faut l'ajouter :
m_nom[strlen(m_nom)] = '\0'; (apres avoir allouer bien sur !)
voila, voila !
13 oct. 2004 à 20:50
Pour le bidule qui consiste a faire passer la window en first plan, je suis en cours d'étude de ta source! lol, en fait, je viens de débuter en prog Win32 dc c nouvo pr moi! :-))
Sinan, apres tout, si l'utilisateur n'est pas si noob, suffit qu'il voit en bas, dans la barre des taches, la new window ouverte! puis il clique dessus et hop! :-))
13 oct. 2004 à 20:25
BruNews, grand merci pour ton aide que tu me donnes chaque fois que j'ai un problême!
@+ tout le monde et merci de vos comment' ! :-))
13 oct. 2004 à 20:05
quelques petites remarques, si je peux me permettre ...
il ya une faille de sécurité dans le constructeur CMutex::CMutex(char *nom)
recuperella taille de nom, alloue dynamiquement de l'espace pour this->nom (la longueur de nom + 1 pour le zero terminal).
meme chose pour rename, desalloue, recupere la taille du nouveau "nom", puis realloue ...
il y a une fuite dans le destructeur, si tu alloues par new[ ], il faut desallouer par delete [ ] !
Si tu fais du C++, il faut te passer du char*, et utiliser std::string à la place, ça évite ces erreurs plutot embetantes ;-)
Pour la conception objet, nom devrait etre private, et
bool ActiveMutex();
void DesactiveMutex();
devraient etre déclarées const (elles ne modifient rien)
-> bool ActivateMutex()const;
bonne continuation ...
@+
13 oct. 2004 à 19:19
UNIQUE INSTANCE PROG (WIN32)
http://www.cppfrance.com/code.aspx?ID=25238
13 oct. 2004 à 19:10
Oui, la MessageBox, c juste pr le signaler à l'utilisateur, c tt :)
13 oct. 2004 à 19:01
il faut respecter le comportement standard sous Windows, le client qui lance son prog par raccourci ou autre doit le retrouver au 1er plan sinon il risque d'insister un bon moment. Le messageBox est inutile par contre.