![]() |
Dereferenzieren in IndyDemo vergessen ?
hi
bin gerade am netzwerk coden und hab nun eine frage hab n tut wo pointer erklärt werden und da steht das man die pointer dereferenzieren muss.. also mit ^ am ende des pointers bevor man dem was zuweisen kann oder auslesen kann.. es steht auch drin das delphi das auch ohne ^ kann aber wieso steht das dann so im tut drin? ( also mit ^ ) tutcode:
Delphi-Quellcode:
in den indy demos ( tcpserver ) sieht das onConnect so aus:
GetMem(FormP, SizeOf(TMultipleForm)); { --> reserviert an der Adresse von FormP den Speicher für die Form}
FormP^ := TMultipleForm.Create(Self); // --> erzeugt die Form FormP^.Caption := FormP^.Caption + IntToStr(Liste.Items.Count + 1); FormP^.Label1.Caption := LabelText.Text; FormP^.OnHide := ListeClick; { --> beim verstecken des Fensters muss ja die Button-Aufschrift aktualisiert werden...} FormListe.Add(FormP); // --> fügt den Pointer zur Liste hinzu Liste.Items.Add('Form' + IntToStr(Liste.Items.Count + 1));
Delphi-Quellcode:
wieso wird bei der delphi demo auf die dereferenzierungs zeichen verzichtet ? der code funzt ja.. ist es echt so das das delphi automatisch dereferenziert ? weil wie oben zu sehen in dem tut ist es ja explizit "manuell" dereferenziert worden o_O
procedure TServerFrmMain.ServerConnect(AThread: TIdPeerThread);
var NewClient: PClient; begin GetMem(NewClient, SizeOf(TClient)); NewClient.DNS := AThread.Connection.LocalName; // wieso nicht NewClient^.DNS := ... ?? NewClient.Connected := Now; NewClient.LastAction := NewClient.Connected; NewClient.Thread :=AThread; AThread.Data:=TObject(NewClient); try Clients.LockList.Add(NewClient); finally Clients.UnlockList; end; Protocol.Lines.Add(TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"'); end; die 2. frage ist.. wieso krieg ich bei der ersten zeile code ( newclient.dns ... ) einen error ( speicherzugriff ) wenn ich GetMem verwende und wenn ich New(newclient) verwende funzt es einwandfrei ? ( wenn ich bei getmem einen breakpoint setze und dem ding ein wenig zeit gebe dann tut es aber auch mit getmem !! ??? ) komische sache.. |
Re: Dereferenzieren in IndyDemo vergessen ?
Es ist eben optional. Delphi weiß, was du vor hast und kompiliert entsprechend.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 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