Pinter(x);

Tags:    delphi

Lad x være et Tobject...
Hvad sker der hvis man bruger funktionen:

Fold kodeboks ind/udKode 


på x?
Jeg kan simpelthen ikke finde det i hjælp-filen.
Det der undre mig mest er, at jeg i en artikel omkring INDY har læst denne kode, hvor "etellerandet" også er et TObject ligesom x.
Så hvorfor skal man bruge Pointer-funktionen på x, når begge i forvejen er af typen TObject?
Beklager det lave UP's... Men har ikke så mange flere...!

Og der er åbenbart ingen der har lyst til at svare seriøst på en alm. kommentar...

Brian



7 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Jeg kan heller ikke finde Pointer funktionen nogen steder.
Hvilken artikel er det du snakker om .. måske er Pointer en funktion der er defineret der i eksemplet, og derfor svært for andre at sige en hylende skid om?

Tobject, hvis jeg har forstået tingene ret, er blot basis eller grun objectet for alle objecter i Object-Pascal.
Så en var der er af typen Tobject, kan derfor holde stort set hvad som helst.
Functionen Pointer kunne fx ud fra var x finde et eller andet object, fx et som x peger på på en eller anden måde (derfor Pointer) eller som peger på x ... hvad det er er som sagt svært at sige.

Men jeg finder ikke Pointer som grund syntax i Delphi nogen steder.

/Jonatan




Nå .. det virker åbenbart uanset om man kan finde det eller ej :(.
Mærkeligt at det ikke er i dokumentationen nogen steder.



Jeg tror at Pointer laver en adresse om til en Pointer.
Hvis fx du har en var (x) som indeholder 10, og @x ville give 1024 (adressen til x),
så kunne du samle dette op i en integer fx ... istedet for at smide det direkte ind i en pointer variabel.

Når du så ville få fat i din var for adressen 1024, så kunne du sige Pointer(1024) og det ville give dig det samme som en pointer var med ^ foran .. dvs det samme som havde du bruge en og samme var.

Fordel ved jeg ikke, men jeg vil så skyde på at x indeholder adressen på en var.



Lad x være et Tobject...
Hvad sker der hvis man bruger funktionen:

Fold kodeboks ind/udKode 


på x?
Jeg kan simpelthen ikke finde det i hjælp-filen.
Det der undre mig mest er, at jeg i en artikel omkring INDY har læst denne kode, hvor "etellerandet" også er et TObject ligesom x.
Så hvorfor skal man bruge Pointer-funktionen på x, når begge i forvejen er af typen TObject?
Beklager det lave UP's... Men har ikke så mange flere...!

Og der er åbenbart ingen der har lyst til at svare seriøst på en alm. kommentar...

Brian


Hej,

Pointer(x) er en typecast og ikke andet :)

Lad os sige at du bruger en TList og gerne vil putte et TObject ind i listen:

MyTList : TList;
MyTObject : TObject;

MyTList.Add(Pointer(MyTObject)); // her fortæller du compileren at den skal opfatte MyTObject som en pointer.

Når du så skal ha' det tilbage caster du din pointer til et TObject:
MyTObject := TObject(MyTList.Items[0]);

Lad os tage et andet eks. hvor vi bruger en Cardinal i stedet for:
MyTList : TList;
MyValue : Cardinal;

MyTList.Add(Pointer(MyValue));

Når du så skal ha' det tilbage caster du din pointer til en cardinal:
MyValue := Cardinal(MyTList.Items[0]);


Så der er intet mystisk ved det :)

Mvh
Michael.



Hvorfor finder man det ikke i doc ?



Det er et typecast....

Jeg har også fundet sammenhængen for netop denne kode...
Jeg tror jeg har sovet for lidt på det sidste... Det var egentligt åbentlyst...

-- hehe

->Beklager;

Brian





Hvorfor finder man det ikke i doc ?


Jeg finder masser af information hvis jeg slår "Pointer" op i hjælpen (via fanebladet "Find").
Jeg kan dog godt forstå at du har problemer med at finde det rigtige, hvis du leder efter en funktion

Prøv at kig efter "typecast" i hjælpen.

Mvh
Michael.



t