Ça irait plus vite de dire où il n'y a pas d'erreur
Version propre "vite faite" (pour la découple on pourrait faire mieux, mais c'est pas simple, et avant que cette solution ne pose des problèmes on a le temps de voir venir) :
Code :
- function strtotstr(const str: string): TStringList;
- var
- tstr: TStringList;
- begin
- tstr := TStringList.Create;
- tstr.Text := StringReplace(str, ';', sLineBreak, [rfReplaceAll]);
- Result := tstr;
- end;
|
Tu ne peux pas libérer le TStrings sinon tu retournes un pointeur ne valant plus rien de concret.
C'est l'appelant qui doit le libérer.
Pour cette raison, en général l'appelant crée le TStrings et le passe en paramètre à une procédure (pas de valeur de retour donc).
Pour créer un objet, on appelle le Create de sa classe, pas de l'objet lui-même vu qu'il n'existe pas encore !
On ne crée jamais de TStrings. C'est juste une classe générique (par ex pour le type de paramètre passé à la procédure/fonction) de laquelle dérivent TStringList et autres similaires.
Ta version marcherait peut-être pour la découpe, mais j'ai pas le courage de réfléchir. À la limite après avoir corrigé le Create et le Free tu peux la tester.
Quand tu dis que ça ne marche pas, tu aurais pu dire que ça crashait avec une Access Violation (je suppose). "Ça marche pas" ce n'est pas une erreur acceptable
Message édité par antp le 25-05-2004 à 23:48:35
---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire