Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - CLX Bug?


lemming - Do 31.07.03 12:37
Titel: CLX Bug?
In einer Funktion versuche ich diese Anweisung auszuführen. Result ist ein WideString. habe es aber schon mit String probiert. Das gleiche Problem.


Delphi-Quelltext
1:
Result := Add(Result, s1);                    


Result wird nicht überschrieben, sondern das Ergebnis (auch WideString) aus Add() wird dahinter angefügt.


Mach ich ein Workaround gehts so:

Delphi-Quelltext
1:
2:
3:
4:
    sTemp := '';
    sTemp := Add(Result, s1);
    Result := '';
    Result := sTemp;


mache ich vielleicht was falsch?


Klabautermann - Do 31.07.03 13:57

Hallo,

wie ist denn ADD aufgebaut? Kannst du diese funktion mal Posten?

Schon merkwürdig.

Gruß
Klabautermann


AndyB - Do 31.07.03 15:44

WideStrings werden unter Linux und Windows unterschiedlich behandelt. Unter Linux haben sie, wie AnsiString einen Referenzzähler. Under Windows sind sie wie ShortStrings, haben also keinen Referenzzähler und werden immer kopiert (hat was mit OLE zu tun)


lemming - Do 31.07.03 16:12

²AndyB, ja und bei normalen Strings ist das auch so? Wenn ich die WideStrings durch normale Strings ersetze, dann das gleiche. Er kettet den String hinten an.

²Klabautermann, die Funktion hab ich hier schonmal geaddet.
http://www.delphi-forum.de/viewtopic.php?t=14559

Was anderes.

ich habe hier diese Schleife


Delphi-Quelltext
1:
2:
3:
4:
5:
repeat
.
.
.
until (dividend < divisor);


dividend ist zu anfangs 17, divisor ist 5.
in jedem durchlauf wird von dividend der divisor subtrahiert. so das es so runter zählt.

12...7...2 und dann sollte schluß sein, weil ja 2 kleiner ist als 5, aber echt macht fröhlich weiter.

Eine Idee woran das jetzt liegt?

-lemmi


AndyB - Do 31.07.03 17:23

lemming hat folgendes geschrieben:
12...7...2 und dann sollte schluß sein, weil ja 2 kleiner ist als 5, aber echt macht fröhlich weiter.

Du musst irgendwo in der Schleife wohl einen Fehler haben. Hast du den Code schon debuggt? (Ohne Code-Optimierung).

Dein anderes Problem kann ich nicht nachvollziehen. Die Funktion Add (sieht etwas langsam aus) hast du aber nicht verändert? Wie sieht der gesamte Aufruf aus, also mit zuweisung an Result und s1.


lemming - Fr 01.08.03 10:33

Das 12 7 3 Problem hat sich mittlerweile gelöst. Der dividend war 05 statt 5. Somit hat es auch immer funktioniert wenn kein Rest übrig bleibt.

Ist ja fürchterlich wenn man nicht weiß ob's nun ein Bug ist oder ob man selber schuld ist. Sonst war man bisher immer selber schuld ;)

Das andere Problem mit dem Anhängen der Widestrings hab ich aber bis her immer noch nicht gelöst.

Danke für die Hilfe.

-lemmi