![]() |
var eine Funktion übergibt wert nicht
Hi,
also ich habe eine Funktion:
Delphi-Quellcode:
diese Funktion rufe ich so auf:
function split_filename(s_filename,s_dir,s_name:string):boolean;
begin dir:='aaa'; s_name:='bbb'; end;
Delphi-Quellcode:
aber sowohl s_dir als auch s_name =''
var
s_dir,s_name:string; begin split_filename('C:\blabla\a.txt',s_dir,s_name); showmessage(s_dir); showmessage(s_name);[ warum? mfg gandime |
Re: var eine Funktion übergibt wert nicht
Hi,
Du gibst erst mal in deiner Funktion nichts zurück. Das solltest du machen, sonst kannst du auch proceduren benutzen.
Delphi-Quellcode:
So würde es klappen.
procedure split_filename(var s_filename,s_dir,s_name: String);
begin s_dir:='aaa'; s_name:='bbb'; end; Gruß Neutral General |
Re: var eine Funktion übergibt wert nicht
es sind auch keine Var Parameter
|
Re: var eine Funktion übergibt wert nicht
das ist jetzt nicht die richtige Funktion ich hab die blos einmal beispielhalber geschrieben
aber der booleanwert wird benötigt |
Re: var eine Funktion übergibt wert nicht
Wie sollen wir den wissen, wie deine Funktion/Prozedur aussieht?Die gepostete funktioniert so nicht.
Delphi-Quellcode:
procedure split_filename(var s_filename; var s_dir, var s_name: String);
|
Re: var eine Funktion übergibt wert nicht
Hallo,
es wird doch nichts zurückgegeben. Bis bald Chemiker |
Re: var eine Funktion übergibt wert nicht
wenn du mit deiner richtigen funktion ein problem hast und mit der geposteten nicht solltest du deine richtige posten.
|
Re: var eine Funktion übergibt wert nicht
hier:
Delphi-Quellcode:
function split_filename(s_filename,s_dir,s_name:string):boolean;
var i_dir_l:integer; s_temp:string; begin if (pos('\',s_filename)<>0) then begin i_dir_l:=length(s_filename); s_temp:=''; repeat s_temp:=s_temp+s_filename[i_dir_l]; i_dir_l:=i_dir_l-1; until (i_dir_l=0); s_name:=split_vor(s_temp,'\',true); s_dir:=split_nach(s_temp,'\',true); i_dir_l:=length(s_name); s_temp:=''; repeat s_temp:=s_temp+s_name[i_dir_l]; i_dir_l:=i_dir_l-1; until (i_dir_l=0); s_name:=s_temp; i_dir_l:=length(s_dir); s_temp:=''; repeat s_temp:=s_temp+s_dir[i_dir_l]; i_dir_l:=i_dir_l-1; until (i_dir_l=0); s_dir:=s_temp+'\'; result:=true; end else begin s_dir:=''; s_name:=''; result:=false; end; end; |
Re: var eine Funktion übergibt wert nicht
Moin gandime,
Du musst zwischen vier Varianten von Parametern unterscheiden: Konstante-Parameter (const): Der Wert wird an die Funktion/Prozedur übergeben, und man kann dem Parameter nichts zuweisen (wird schon vom Compiler geblockt). Wert-Parameter (kein Prefix): Der Wert wird als Kopie an die Funktion/Prozedur übergeben. Man kann dem Parameter etwas zuweisen, das hat dann aber nur innerhalb der Funktion/Prozedure Gültigkeit. Var-Parameter (var): Der Wert wird an die Funktion/Prozedur übergeben, man kann etwas zuweisen, und es wird hierbei in die Variable geschrieben, die angegeben wurde. Out-Parameter (out): Es wird kein Wert an die Funktion/Prozedur übergeben. Dieser Paramtertyp dient nur dazu Werte zurückzugeben. (Result reicht ja nicht immer ;-)) |
Re: var eine Funktion übergibt wert nicht
danke für die info jetzt hab ichs
|
Re: var eine Funktion übergibt wert nicht
Hallo,
du musst einen String nicht umständlich per Hand umkehren, wenn du Zugriff auf die Funktion StrUtils.ReverseString() hast. Wenn du das ganze auch noch machst um an das letzte Trennzeichen zu gelangen, dann solltest du dir mal SysUtils.LastDelimiter() anschauen. Wenn du aus einem Pfadnamen den Namen von Verzeichnis und Datei getrennt herausziehen möchtest, dann helfen dir ExtractFileDir() und ExtractFileName(). Grüße vom marabu |
Re: var eine Funktion übergibt wert nicht
|
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Internet / LAN / ASP.NET" nach "Object-Pascal / Delphi-Language" verschoben.
Nicht wirklich ein Netzwerkproblem ;-) |
Re: var eine Funktion übergibt wert nicht
Zitat:
In der Exe sieht es völlig identisch aus. Aber unser Delphi will ja alles schön aufgeräumt haben :hello: |
Re: var eine Funktion übergibt wert nicht
Nein, bei const-Parametern wird das meist so gemacht, dass der Compiler dann darauf verzichtet, die Parameter zu "retten", was etwas Zeit spart, aber eben dazu führt, dass man den Wert nicht verändern darf (außer man will das, wie eben bei einem var-Parameter.
|
Re: var eine Funktion übergibt wert nicht
Kleiner Nachtrag noch zu out-Parametern: Selbst wenn ein vernünftiger Wert beim Aufruf im Paramerter steht, wird dieser 'neutralisiert', d.h. der Parameter muss immer in der Methode initialisiert werden. Hier kann es bei Nichtbeachtung zu bösen Zugriffsverletzungen kommen. Out-Parameter werden quasi analog zu lokal deklarierten Variablen behandelt. Auch ist zu beachten, dass eine evtl. übergebene Objektinszanz nicht freigegeben wird.
|
Re: var eine Funktion übergibt wert nicht
Moin Zusammen,
ich hätte da auch noch einen Nachtrag zu const-Parametern: Wenn hier eine Objektreferenz übergeben wird, kann man natürlich die Methoden und Eigenschaften des Objektes benutzen (letztere auch ändern, wenn sie nicht Read-Only sind). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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-2025 by Thomas Breitkreuz