| |||||
| Dernière réponse | |
|---|---|
| Sujet : CString en C++ | |
| BENB | http://www.microsoft.com/france/vs [...] intro.html
voila la lib qui remplace (remplacera) les MFC... |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| BENB | http://www.microsoft.com/france/vs [...] intro.html
voila la lib qui remplace (remplacera) les MFC... |
| BENB |
|
| oliv5 | Ok, je vois ce dont il s'agit. J'ai deja essayé de m'en servir et VC++6 ne veut pas compiler le truc. c'est quoi qu'il faut inclure ? |
| BENB | STL > Livre en standard avec la plupart des compilo recents...
sgi distribue une version free je crois, et, RogueWave une version payante... [edit]--Message édité par BENB--[/edit] |
| oliv5 | bah, tant pis, mais explique toujours. Ou c'est qu'on peut trouver ces lib. (c'est ca surtout, apres je verrais ce que je peux faire avec.) Pour le moment, je fais tout ou presque à la main (listes chainees, chaines de caracteres etc...) |
| BENB |
|
| oliv5 | Bon, y en a marre. Y en a plein qui parlent de classes STL, ptain, elles ont l'air magiques et je sais pas ce que c'est ... J'en aurrais bien besoin, pour des arbres entre autre.
j'exige des explications :) |
| zop |
|
| verdoux |
|
| El_gringo | 'fait chier, je vient d'apprendre à me servir des MFC pour un stage que je fais... |
| BENB | Il y aura une nouvelle lib compatible C# (mais incompatible MFC) |
| El_gringo | bah, et si y a plus de MFC, y aura quoi !? plus que le SDK ? |
| BENB |
|
| El_gringo | merci, en fait g trouvé mais vous pouviez pas trouver, j'avais pas pensé à mettre un truc...je faisait un memset sur tout le tableau a l'initialisation, et ça faisait des merdes :D :D Merci tt le monde qd même (et ton truc ça aurai marché aussi je pense Amadeus, malgré mon memset !) |
| Amadeus | Le pb, je pense, est du au fait que les CString sont des classes qui passe leur temps à allouer et désallouer la mémoire alors les mettre comme membre d'une structure j'ai jammais essayé pasqu'une structure par "tradition" contient des types simples ou des pointeurs.
Essayes de modifier ta structure comme ça : typedef struct _TACHE_ENV { CString* num; eTYPE_ENV type; CString* arg1; CString* arg2; CString* libelle; } TACHE_ENV; TACHE_ENV m_TabTachesEnv[255]; for (int i=0; i<255; i++) { m_TabTachesEnv[i].num = new CString("init" ); // pareil pour les 3 autres CString } puis tu utilises tes ptr : *m_TabTachesEnv[i].num = "hello"; ... m_TabTachesEnv[i].num->Empty(); ... à la fin t'oublies pas de libérer la mém : for (int i=0; i<255; i++) { delete m_TabTachesEnv[i].num; // pareil pour les 3 autres CString } C'est un peu plus (très peu) compliqué que ce que t'as fait mais ça marchera sans pb :)
[edit]--Message édité par Amadeus--[/edit] |
| El_gringo | fait pas chier grosmétos, y a des gens sérieux qui essayent de travailler, alors je sais que que toi tu t'emmerde, mais moi j'essaye de bosser... :D :D |
| grosmethos | tu n'avais qu'a bosser tes cours, voila maintenant t'es perdu!!! |
| El_gringo | bien sur, mais je te rappel que c une erreur d'execution, la seule façon de la localiser, c'est le debugger, sinon, tout ce qu'y me dis lui, c que mon application plante !
voila, ça c une partie, mais à chaque fois que je fais une opération sur un élément CString contenu dans ce tableau de structure, ça plante: CString test = "zik"; // marche bien (test) test = _Arg1; // marche bien (test) m_tachesEnv[_index].arg1.Empty(); // plante m_tachesEnv[_index].arg1 = _NoTache; // plante |
| Amadeus | Tu peux nous montrer la partie de ton code où l'erreur apparaît ?
ça va être ainsi + facile de t'aider
|
| El_gringo | Merci, mais ça aurai été trop beau, moi aussi j'y ai cru un moment, mais non, je l'ai juste viré en le collant, mais dans mon prog il y est...re snif ! |
| Amadeus | En fait ton erreur est d'avoir omis un point-virgule ->
typedef struct _TACHE_ENV { CString num; // point-virgule ici!!! eTYPE_ENV type; CString arg1; CString arg2; CString libelle; } TACHE_ENV; Ensuite tout marchera :) C'est quand même bizarre que t'es pas eu un msg du type "missing ';' before identifier ..." !
[edit]--Message édité par Amadeus--[/edit] |
| El_gringo |
|
| El_gringo |
|
| BENB | Pourquoi utiliser des CStrings ?
les MFC ne sont plus supportees par Microsoft, et une classe string de la STL devrait correspondre a tes besoins non ? |
| verdoux | Comment construis tu ton tableau m_TabTachesEnv ? |
| El_gringo | Apparement, dès que j'utilise m_TabTachesEnv[1].arg1, même pour autr chose ( ex: .Empty()) ça fait une plantage violent à l'execution ! |
| El_gringo | En fait, à force de réflexion, j'en sais un peu plus...
Alors, l'erreur vient de la variable qui reçoit la CString. Elle appartient à une structure dont voici la définition: typedef struct _TACHE_ENV { CString num eTYPE_ENV type; CString arg1; CString arg2; CString libelle; } TACHE_ENV; voilà, et j'ai un tableau d'éléments de cette structure: m_TabTachesEnv; et si je demande: m_TabTachesEnv[1].arg1 = UneCString; ça fait un débordement mémoire !? Pourquoi ? qqn à une idée ? Sachant que UneCString est correcte, et que la même attribution, avec un char arg1[255] dans la structure (et donc, bien sur un strcpy pr attribuer !) se passait très bien... Help ! snif... :cry: |
| El_gringo | ...merci, mais c pas un tableau de CString ce que je veux utiliser, c des CString tout court ! |
| la viper | fait un tour sur la classe CStringArray .. tres pratique pour tout ce qui conserne les tableaux de CString @+ et bonne chance |
| El_gringo | Hé non, parce que j'utilise des fonctions de CString qui fonctionnent très bien, comme CString::Left, qui est censée me rendre une CString correctement terminée qd même j'imagine !
et c'est en attribuant la valeur rendue par cette fonction à une autre CString que ça foire ! |
| n0mad | Verifie que les chaines se terminent par un '\0', c'est sans doute ça. |
| El_gringo | j'ai décidé de remplacer, dès que c'est possible, dans mon application, toutes les chaines de type char nomVar[unNombre], par des CString, qd même plus pratiques !
après avoir corrigé toutes les erreures de comilation, je lance mon prog...plantage violent, débordement mémoire je crois. Avec le débugger, je vois que ce qui fait ce débordement, c'est les opération toute bêtes, du style: m_tachesEnv[_index].arg1 = _Arg1; ou les 2 sont de type CString. :gun: passer une seule fois sur ces opérations suffit à ce putain de débordement mémoire (et désolé pour mes débordements de langage à moi !) Je suis sur que qqn à déja connu ça et connai la solution toute simple (on peut rêver, non ?) Si c la cas, merci d'avance... |




