AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dereferenzieren in IndyDemo vergessen ?

Ein Thema von supermuckl · begonnen am 14. Jun 2004 · letzter Beitrag vom 14. Jun 2004
Antwort Antwort
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#1

Dereferenzieren in IndyDemo vergessen ?

  Alt 14. Jun 2004, 20:28
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:
  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));
in den indy demos ( tcpserver ) sieht das onConnect so aus:

Delphi-Quellcode:
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;
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

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..
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dereferenzieren in IndyDemo vergessen ?

  Alt 14. Jun 2004, 20:33
Es ist eben optional. Delphi weiß, was du vor hast und kompiliert entsprechend.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz