Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3086 connectés 

 


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...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
BENB http://www.microsoft.com/france/vs [...] intro.html
 
voila la lib qui remplace (remplacera) les MFC...
BENB

oliv5 a écrit a écrit :

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 ?




par exemple pour une string
- > #include <string>
- > using namespace std; //je crois dans mon implementation y en a pas besoin...
- > string toto;
etc...

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 a écrit a écrit :

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 :)




je ne connais pas d'arbre dans la STL, mais il y a des map et la plupart des implementation ont des HashTable...

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

BENB a écrit a écrit :

Il y aura une nouvelle lib compatible C# (mais incompatible MFC)




 
On reconnaît bien là Microsoft :D :lol: :D

verdoux

El_gringo a écrit a écrit :

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  




 
Oui en c++, il faut y réfléchir plusieurs fois quand on veut bidouiller soi-même la mémoire (avec memset, malloc et autres) car le langage, via les constructeurs, fait déjà pas mal de trucs et quand il y a interférence, ça plante.
 
Par exemple en c++:
TACHE_ENV m_TabTachesEnv[255];
Va créer le tableau puis appeler le constructeur pour chaque struct TACHE_ENV qui à son tour va appeler les constructeurs des membres et notamment CString()  
 
C'est pas aussi simple qu'en C.

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 a écrit a écrit :

 
 
Comment ça !? bien sur que si, elle sont supportées pas Miscrosoft les MFC...




Non le support des MFC s'arrete avec velui de Visual 6.0... apres plus de MFC...

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 :)
 

El_gringo a écrit a écrit :

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



 

[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 a écrit a écrit :

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 !



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 ..." !
 

El_gringo a écrit a écrit :

 
 
Comment ça !? bien sur que si, elle sont supportées pas Miscrosoft les MFC...



 

[edit]--Message édité par Amadeus--[/edit]

El_gringo

BENB a écrit a écrit :

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 ?




 
Comment ça !? bien sur que si, elle sont supportées pas Miscrosoft les MFC...

El_gringo

Verdoux a écrit a écrit :

Comment construis tu ton tableau m_TabTachesEnv ?




 
Tout bêtement comme ça :
 
TACHE_ENV m_TabTachesEnv[255];
 
ça pose un problème !?

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...

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)