hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 2007
-
4 août 2006 à 17:04
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 2007
-
4 août 2006 à 21:09
Bonjour à tous.
1er post, 1ere erreur ? c'est peut être pas ici que je doit pleurer... j'essaye
J'ais quelque chose de simple, une petite appli qui tourne bien sous CE 4.2, mais qui aujourd'hui cafouille sous windows "pas-CE" (XP par exemple).
A un moment donnée je vide un vecteur comme cela : modules.erase(modules.begin(), modules.end());
Tout est OK si je compile "en ASCI" (c'est a dire pas en unicode), mais si je compile avec UNICODE de defini, et bien l'appli reste bloquer dans le erase. Et comme c'est un vecteur (la stl, template donc) je vois rien en pas a pas, je ne comprend pas pourquoi erase ne s'arrete jamais. Et y'a pas d'erreur, ca tourne sans que rien ne se produise....pas d'acces violation, rien, nada, walou.
Ce qui est stocké dans le vecteur est assez bete, une structure simple avec des DWORD et des trucs comme ça, pas de pointeurs ni rien de dangereux.
Quelqu'un a t'il une idée de ce que je devrais chercher ?
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 20071 4 août 2006 à 20:12
Les deux mon capitaine, je me suis déja fais avoir : MS s'amuse à changer ses #define d'une version de Visual à l'autre. _UNICODE ou UNICODE, _DEBUG ou DEBUG etc....
Au final, je me contente très bien d'une version non unicode de l'appli, ça n'a aucune importance, nous n'avons pas d'imperatif d'internationalisation ou autre, mais j'aimerais bien comprendre ce qui ce passe bond'la.
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 20071 4 août 2006 à 20:38
La structure je l'ai pas en tête, et le boulot c'est terminer jusqu'au 1 septembre, vacances, aussi j'y retournerais pas pour toi
Mais en gros, elle doit ressembler à cela :
struct _module_information
{
TCHAR path[MAX_PATH];
TCHAR version[taille je sais plus combien]
DWORD crc32;
DWORD size;
} module_information;
Je te devance un peu, voici l'utilisation que j'en fait : je parcours recursivement un repertoire et ses fils pour y chercher tous les exe/dll qui constituent notre appli. Des que j'en trouve je renseigne une variable local (mod) du type de la structure et je la colle dans le vecteur par un modules.push_back(mod);
Y'a donc une copie qui est effectuée, c'est sûr. Et je me demande si le problème au vidage du vecteur ne vient pas du fait du destructeur par defaut géneré par le compilo pour la structure (car apres tout en C++ une structure est une class un peu simpliste, sans fonction membres, y'a donc forcement constructeur/destructeur par defaut. Non ?)
Je note le coup du resize(0) pour la rentrée.
Thanks
zNoRt~!
Vous n’avez pas trouvé la réponse que vous recherchez ?
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 20071 4 août 2006 à 20:42
apparté : UNICODE vs. _UNICODE, y'a quand même à voir avec la version de Visual. Par exemple, entre Visual C++ 6 et Embedded C++ 4.0, et bien si tu veut coder un p'ti bidule que pour une phase de débug, faut l'encadrer par DEBUG dans une version de Visual et _DEBUG dans l'autre, idem pour UNICODE / _UNICODE, MBCS etc...
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 20071 4 août 2006 à 21:09
itou.... 0 Warning, 0 error, mais exécution = puik !
Dans mon cas, UNICODE et _UNICODE sont définit pour tout le projet (project settings -> onglet C/C++ -> catégorie preprocessor), mais ça revient au même., J4ai essayer en linkan avec differentes version de la librairie C (Debug multithreaded, Debug multithreaded DLL etc ) mais c'est toujours pareil.
Bah.... je vais aller manger, dormir, preparerun peu les valises, aller en Bretagne, lire des livres en papier avec des mots dedans, nager, et je verais tout ça à la rentrée.