Autor |
Beitrag |
Mortal-Shadow
Beiträge: 110
|
Verfasst: Di 11.11.08 18:09
Hi,
ich wühle mich grade durch Narses Tutorial über seine Udp-Komponente, wobei mir dabei folgendes schleierhaft ist:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.UdpSockUtil1Receive(Sender: TObject); var vonIP: in_addr; Data: TStringList; Current: TCmdToken; begin Data := TStringList.Create; try Data.Text := UdpSockUtil1.ReceiveText(vonIP); if (Data.Count > 1) then if (Data.Strings[0] = APP_ID) then begin Current := GetCmdToken(UpperCase(Data.Strings[1])); if (Data.Count >= (Syntax[Current].ArgCount +1)) then Execute(Current,Data,vonIP); end; finally Data.Free; end; end; |
Und zwar die Variable "vonIP".
So wie ich das sehe wird sie ja nirgends zugewiesen - woher weis das Programm also welche Ip-Adresse es ist?
Oder liegt das an in_addr, das dieser Typus automatisch abgefragt wird?
Für eine Aufklärung wäre ich dankbar.
Gruß,
MS.
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.11.08 18:18
Narses hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.UdpSockUtil1Receive(Sender: TObject); var Msg: String; vonIP: in_addr; begin Msg := UdpSockUtil1.ReceiveText(vonIP); ShowMessage(IntToStr(Length(Msg))+#13+Msg+#13+inet_ntoa(vonIP)); end; | |
|
|
Mortal-Shadow
Beiträge: 110
|
Verfasst: Di 11.11.08 18:33
Danke für die schnelle Antwort, aber hast du ein anderes Tutorial wie ich? (Ich habe 1.01)
Ich habe nämlich das komplette Receive-Event per paste+copy gepostet.
Weiterhin verstehe ich deine Antwort ebenfalls nicht ganz:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.UdpSockUtil1Receive(Sender: TObject); var Msg: String; vonIP: in_addr; begin Msg := UdpSockUtil1.ReceiveText(vonIP); ShowMessage(IntToStr(Length(Msg))+#13+Msg+#13+inet_ntoa(vonIP)); end; |
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.11.08 19:29
In der Funktion ReceiveText wird das in die angegebene Stringvariable geschrieben . Es ist ein variabler Parameter, d.h. der kann in der Funktion verändert werden, an den du die Variable als Parameter übergibst.
Deshalb kannst du da auch nicht einfach '192.0.0.1' oder so angeben, denn das wäre eine unveränderbare (im Code angegebene) Konstante.
Woher das Zitat stammt? Klick einfach auf den kleinen Pfeil oben neben " Narses hat folgendes geschrieben" .
|
|
Mortal-Shadow
Beiträge: 110
|
Verfasst: Di 11.11.08 19:36
jaenicke hat folgendes geschrieben : | In der Funktion ReceiveText wird das in die angegebene Stringvariable geschrieben . |
Ich vermute mal du hast meine Frage falsch verstanden.
Beim Aufruf der Funktion übergibt man ja die Variable "vonIP".
Mich interessiert lediglich wo der Wert der Variable "vonIp" selbiger zugewiesen wird.
Zum veranschaulichen:
Delphi-Quelltext
So etwas, oder etwas ähnliches verisse ich nämlich komplett - habe es nirgendwo gesehen.
Wo wird der Variable also ihr Wert zugewiesen?
|
|
Boldar
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Di 11.11.08 19:38
In der Funktion, d.h. die Variable ist erst nachher definiert.
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.11.08 19:43
Vielleicht mal ein kleines Beispiel: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ButtonXClick(Sender: TObject);
function Test(var X: String): String; begin X := 'Ich war ein Funktionsparameter'; Result := 'Ich war ein Funktionsergebnis'; end;
var MyString, MyResult: String; begin MyResult := Test(MyString); ShowMessage('MyResult = ' + MyResult + #13#10 + 'MyString = ' + MyString); end; | Ich hoffe ich habe mich jetzt nirgends vertippt.
|
|
Mortal-Shadow
Beiträge: 110
|
Verfasst: Di 11.11.08 19:54
Ich glaube mir ist jetzt ein Licht aufgegangen, nachdem ich dein Beispiel mal kompiliert hab.
Noch mal zusammenfassen ob ichs begriffen hab:
Dadurch das in der Funktion vor dem Übergabe-Parameter ein "var" steht, wird seine Adresse übergeben.
Dadurch wird er in der Funktion beschrieben.
Stimmt das so?
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.11.08 20:05
Richtig .
Wobei bei Objekten immer eine Referenz auf das Objekt übergeben wird, auch wenn var nicht angegeben ist.
|
|