Edit Control - C++ - Programmation
Marsh Posté le 20-04-2005 à 17:32:55
En fait, j'utilise une CString intermédiaire. Je pense que c'est elle qui est trop courte. Existe-t-il un type plus grand que CString?
Comment je pourrais faire ca proprement? Je vais pas faire un tableau de CString
Marsh Posté le 20-04-2005 à 18:41:18
ReplyMarsh Posté le 20-04-2005 à 18:58:24
CString::GetLength() retourne un int, on peut donc supposer que la taille maximale d'une CString tient sur 32 bits !
Donc bon, je veux bien te croire quand tu dis que tes chaines sont longues, mais de là à atteindre 4 294 967 296 caractères, je pense plutot que tu dois te louper en utilisant ta CString
Marsh Posté le 20-04-2005 à 19:30:31
me semble que la classe CEdit a une limitation pour la taille maximale de donnée, genre 32k pour win98 et 64k pour win NT/XP/2K.
Pour dépasser ca, tu peux remplacer ton CEdit par un CRichEditCtrl qui n'a pas cette limite (ou beaucoup plus loin).
sinon il me semble que CEdit remonte un evenement lorsqu'il est plein.
Marsh Posté le 20-04-2005 à 20:03:36
Je crois qu'il s'agit de taille par défaut, qui sont modifiables même avec l'Edit de base. De plus, si je me souviens bien cette taille limite n'affecte que le texte tapé / entré par l'utilisateur et non le texte envoyé par WM_SETTEXT.
Marsh Posté le 20-04-2005 à 20:31:45
SquiZZ a écrit : me semble que la classe CEdit a une limitation pour la taille maximale de donnée, genre 32k pour win98 et 64k pour win NT/XP/2K. |
Un Edit multiligne de windows ne peut contenir que 64k en Win9x, mais 2 Go en NT/2K/XP. Je ne sais par contre pas si le CEdit suit les mêmes limites que l'Edit de l'API Win32. Je me base sur les limites du "TMemo" en Delphi
Marsh Posté le 20-04-2005 à 20:57:08
En fait j'ai une appli qui recupere par WMI les logiciels installés sur la machine. Donc en gros j'ai une boucle et pour chaque logiciel je recupere une 20aine d'infos. Donc au fur et a mesure je rempli ma CString:
En gros je fais ca : (j'ai pas le code sous les yeux)
Code :
|
Et au bout d'un moment ca plante. Si j'arrete aux bout de 10 boucles ca marche donc je suppose que c'est un probleme de taille de CString ou CEdit.
J'ai aussi passé ma variable CEdit en Value plutot que Control et ca fait la meme chose.
Marsh Posté le 20-04-2005 à 21:01:06
antp a écrit : Un Edit multiligne de windows ne peut contenir que 64k en Win9x, mais 2 Go en NT/2K/XP. Je ne sais par contre pas si le CEdit suit les mêmes limites que l'Edit de l'API Win32. Je me base sur les limites du "TMemo" en Delphi |
Si je récupère la taille du CEdit (GetLimitText) il me renvoi 300000 je crois me souvenir.
Le CRichEditCtrl c'est en C# ca je crois.
Marsh Posté le 20-04-2005 à 21:05:45
ReplyMarsh Posté le 20-04-2005 à 21:37:35
Je te dis ca demain, mais de tete, le debug m'envoi dans une fonction de CString.h ou un fichier du genre, je confirme demain.
Marsh Posté le 20-04-2005 à 22:46:15
resultat_wmi c'est quoi exactement ?
Le Rich Edit c'est Win32 de base.
Marsh Posté le 21-04-2005 à 09:19:29
Mon resultat_wmi c'est :
Code :
|
et je l'utilise comme ca :
Code :
|
Et le debug m'envoi dans le fichier "cstringt.h" sur la ligne:
Code :
|
Marsh Posté le 21-04-2005 à 10:37:09
et je suppose que ton pointeur n'est jamais nul...
Marsh Posté le 21-04-2005 à 11:17:46
Je ne pense pas que ce soit ca car je teste si la fonction qui assigne le pointeur échoue.
De plus, Il y a 20 resultats à afficher. Si j'affiche tout ca plante au 11eme. Si j'affiche les 10 premiers ca passe et si j'affiche le reste, les 10 derniers, ca passe aussi, donc y'a pas de pointeur NULL qui traine
Marsh Posté le 21-04-2005 à 14:00:49
Oui c'est un bad pointer mon probleme, mais comment je peux tester quand j'ai un bad pointer pour ne pas effectuer d'opération dessus? (j'ai testé avec NULL et 0 mais ca ne marche pas)
Pour info ma variable est un VARIANT et je recupere la valeur qu'il m'interrese comme ca :
mon_variant.bstrVal;
Et le debuggage me met pour mon_variant.bstrVal : 0x000000a8 <Bad Ptr>.
Ce qui est zarb c'est que y'a souvent <Bad Ptr> mais ca passe sans probleme.
Marsh Posté le 21-04-2005 à 17:01:37
Test si mon_variant.vt == VT_BSTR.
Tu récupères ça comment exactement ? Tu fais gaffe aux fuites de mémoire ?
Tu devrais jeter un oeil à _bstr_t et _variant_t.
Marsh Posté le 20-04-2005 à 17:21:42
Bonjour,
Je suis enmerdé avec un Edit Control qui fait planté mon appli car il est plein. Je l'utilise en multi-lignes.
J'ai beau changé la taille limite mais rien y fait, ca plante toujours.
A l'initialisation de la fenetre je fais ca :
et apres j'ajoute mon texte avec
Il s'étend sur des centaines de ligne au final.
Que faire? Merci
Message édité par AsTro le 20-04-2005 à 17:25:19