![]() |
einer Klassenfunktion einen berechneten Wert übergeben?
Hallo,
ich bin gerade auf einen mir unbekannten Effekt gestoßen. (Delphi 5) Innerhalb einer Klasse habe ich folgende Klassenfunktion definiert:
Delphi-Quellcode:
Von anderer Stelle habe ich diese Funktion dann aufgerufen:
class function TMyObject.FindCtrlTag(Text: string; Offset: integer; out CtrlTag: string): integer;
Delphi-Quellcode:
Ich hoffe es wird klar worauf ich hinaus will. Ziel ist alle Tags in Text zu durchlaufen.
...
var CtrlTag : string; Idx: integer MyText : string; begin MyText := 'test <tag> test'; ... Idx := TMyObject.TMyObject.FindCtrlTag(MyText, 0, CtrlTag); while Idx > 0 do Idx := TMyObject.TMyObject.FindCtrlTag(MyText, Idx + Length(CtrlTag), CtrlTag); end; Beim zweiten Aufruf von FindCtrlTag kommt innerhalb der Funktion aber nur der Wert von "Idx" an und nicht der Wert von "Idx + Length(CtrlTag)". Zuvor hatte ich dort auch mal "Pred(Idx + Length(CtrlTag))" stehen. Dann kam in der Funktion immer 0 an. gelöst habe ich es so:
Delphi-Quellcode:
Kann mir das jemand erklären?
...
type TMyObject = class ... class function TMyObject.FindCtrlTag(Text: string; var Offset: integer; out CtrlTag: string): integer; //Offset als "var" ... end; ... var CtrlTag : string; Idx: integer MyText : string; begin MyText := 'test <tag> test'; ... Idx := TMyObject.TMyObject.FindCtrlTag(MyText, 0, CtrlTag); while Idx > 0 do begin Inc(Idx, Length(CtrlTag)); //Idx vorher erhöhen Idx := TMyObject.TMyObject.FindCtrlTag(MyText, Idx, CtrlTag); end; end; Danke! |
Re: einer Klassenfunktion einen berechneten Wert übergeben?
Hallo,
da du die Variable CtrlTag als OUT-Parameter vereinbart hast, wird ihr Inhalt gelöscht, bevor seine Länge ermittelt werden kann. Wenn du die Variable als VAR-Parameter vereinbarst, dürfte der Fehler nicht auftreten. Eine genaue Erklärung findest du auf ![]() Gruß Hawkeye |
Re: einer Klassenfunktion einen berechneten Wert übergeben?
Das war aber nicht die Implementation der Funktion, sondern nur der Aufruf (oder ich hab das völlig missinterpretiert).
|
Re: einer Klassenfunktion einen berechneten Wert übergeben?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz