Bonjour à tous
Dire que j'ai oublié ça :/
Pour une TStringList, par exemple :
Je ne sais plus. Mes neurones se crapahutent ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3if ALLOWED Lst_Machin ?
Merci !
Bonjour à tous
Dire que j'ai oublié ça :/
Pour une TStringList, par exemple :
Je ne sais plus. Mes neurones se crapahutent ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3if ALLOWED Lst_Machin ?
Merci !
j'imagine que tu veux
Code : Sélectionner tout - Visualiser dans une fenêtre à part if assigned(Lst_Machin) then ...
Evidemment, faut que le valeur soit mise à nil
Si c'est un membre d'un objet, l'initialisation de l'instance, le fera implicitement
Par exemple Lst_Machin est un membre privé dé TForm, cela sera à nil après le Create
Si c'est une variable locale/globale, faut le faire explicitement, sinon cela contiendra une valeur aléatoire (la compilation RELEASE provoquant plus de code aléatoire que DEBUG à cause d'un code plus compact)
Par exemple Lst_Machin est déclaré en var après implementation, ne pas oublier de mettre à nil
Si tu reprends un code dégueux qui n'a pas bien fait les choses, à titre de débogage, tu dois chasser les objets non initialisés à nil
Je me suis fait en D6, une fonction pour chopper des objets libérés mais sans être mis à nil ... ça c'est la pire source d'erreur possible, conserver une référence invalide.
j'avais à terme tout remplacer par du FreeAndNil pour les variables globales ou membres, inutile pour les locales à 99% du temps
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 {* ----------------------------------------------------------------------------- La Fonction RealAssigned vérifie qu'un objet est non nul et vérifie si il est véritablement allouée @param Obj une référence variable d'un objet @return Assigned renvoie false si la valeur nil est attribuée à P ou incorrectement instancié, et true dans le cas contraire. ------------------------------------------------------------------------------ } function RealAssigned(var Obj): Boolean; begin Result := Assigned(Pointer(Obj)); if Result then begin try Result := (TObject(Obj) is TObject(Obj).ClassType) and SameText(TObject(Obj).ClassName, TObject(Obj).ClassType.ClassName); if Result then begin Result := not IsBadReadPtr(Pointer(Obj), TObject(Obj).InstanceSize); if Result then begin Result := not IsBadWritePtr(Pointer(Obj), TObject(Obj).InstanceSize); if not Result and IsRunInDebugger then OutputDebugString('RealAssigned : IsGoodReadPtr but IsBadWritePtr !'); end else if IsRunInDebugger then OutputDebugString('RealAssigned : ClassName OK but IsBadReadPtr !'); end; except on E: Exception do Result := False; end; end; end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bonjour, ShaireLeTroll !
C'était ça : ASSIGNED !!
Merci![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager