Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "variable" pointer -ist das möglich? (https://www.delphipraxis.net/44628-variable-pointer-ist-das-moeglich.html)

heiopei 21. Apr 2005 19:35


"variable" pointer -ist das möglich?
 
abend,
tja ich hab mir letztens den code von einem programm, das ich geschrieben hat, mal angeschaut und wollte den code n bisschen optimieren, bzw. das programm mal neu machen (strukturieren, etc...), da ich das programm für eine firma warten muss. so viel dazu.

jetzt hab ich mir überlegt, folgende prozedur umzuschreiben (in etwa)

Delphi-Quellcode:
procedure duawos(kind: Byte; wert1, wert2: Shortstring; wert3: Single; wert4: Word; ...);
indem ich für die ganzen variablenangaben einen pointer verwende.
(die prozedur benutz je nach kind nur manche variablenwerte, da ich nicht 5 prozeduren mit gleichem zweck haben wollte ;-)).

also hab ich jetzt definiert (wobei die typen typ1... für eine bereits definierte struktur stehen):

Delphi-Quellcode:
TDATA = record
  typ1: ^TTyp1;
  typ2: ^Typ2;
  ...
end;
jetzt wollte ich die prozedur so umformen:

Delphi-Quellcode:
procedure duawos(kind: Byte; data: TDATA);
und dann jedesmal, wenn die prozedur aufgerufen wird, nur die daten in der entsprechenden (durch kind bestimmt) übergeben - alle anderen pointer-teile werden auf nil gesetzt.

allerdings funktioniert das so nicht! :-( :evil:

also: längste rede, kurzer sinn - ist es möglich, das so zu realisieren, wie ich es jetzt beschrieben habe, oder geht das nicht? (außerdem hab ich noch probleme beim zugreifen auf die jeweiligen pointer-"inhalte")

danke für infos,
heiopei

jfheins 21. Apr 2005 19:49

Re: "variable" pointer -ist das möglich?
 
Nun, es gibt etwas viel besseres:

Variante records :zwinker:

Damit kann der Inhalt eines Records völlig unterschiedliche Typen haben - genau das, was du brauchst (glaub' ich :mrgreen: )

OH: Delphi-Referenz durchsuchencase

bttb930 21. Apr 2005 19:51

Re: "variable" pointer -ist das möglich?
 
klar geht das, aber mit expliziten pointern hab ich 1990 programmiert - wir haben jetzt 2000, nimm gefäligst klassen.

cih frag mich immer wieder, wieso noch immer so viele mit zeigern hantieren. das liegt alles an der abwärtskompatibilität...

heiopei 21. Apr 2005 19:53

Re: "variable" pointer -ist das möglich?
 
ja, ich glaub das ist schon was ich mein.

aber warum "case" ????

naja, klingt sonst ganz vielversprechend, aber wie wende ich das dann an ?(hab jetzt leider grad kein delphi zur hand :-( )

mfg,
heiopei

Christian Seehase 21. Apr 2005 20:00

Re: "variable" pointer -ist das möglich?
 
Moin Heiopei,

Zitat:

Zitat von Heiopei
allerdings funktioniert das so nicht!

Kannst Du mir mal Deine Kristallkugel leihen?

Das funktioniert doch bestens.
(Ich weiss natürlich nicht, wie Du es gemacht hast ;-))

heiopei 21. Apr 2005 20:06

Re: "variable" pointer -ist das möglich?
 
Zitat:

Kannst Du mir mal Deine Kristallkugel leihen?
ihr mit euren kristallkugeln ;-)


Zitat:

Das funktioniert doch bestens.
(Ich weiss natürlich nicht, wie Du es gemacht hast Wink)
was soll das heißen? das mein code so teoretisch funktionieren sollte, oder das meine angaben nich vollständig genug sind :gruebel:

um noch mal darauf zurückzukommen:

Zitat:

OH: "case"
- was soll das heißen - "case" :gruebel: :!:

jfheins 21. Apr 2005 20:09

Re: "variable" pointer -ist das möglich?
 
Zitat:

was soll das heißen - "case"
Dass du in der OH unter dem Schlüsselwort case variante Records nachschlagen kannst.

Die werden irgendwie so definiert:
Delphi-Quellcode:
Rekord: record
i: Boolean;
case i of
TRUE: a: String;
FALSE: a: Integer;

heiopei 21. Apr 2005 20:15

Re: "variable" pointer -ist das möglich?
 
@jfheins,
stimmt, jetzt fällts mir wieder ein - hab das schon mal irgendwo gelesen

also dann werd ich das wohl verwenden!!! sollte ja ziemlich einfach sein :lol:

sorry wegen der blöden frage wegen case - war aber wirklich nich sehr eindeutig ;-)


noch nen schönen abnd - ich geh jetz pennen

heiopei

Robert_G 21. Apr 2005 20:47

Re: "variable" pointer -ist das möglich?
 
ähm...
Eine Instanz einer Klasse IST ein Pointer. ;)
Der Größe-Unterschied zu einem PSomeBloodyRecord besteht nur in dem internen Zeiger auf die VMT. (Also weitere 4Bytes)

Klassen können aber Methoden haben, records können und wissen rein gar nix... (außer simple Daten halten ;) )
Ich weiß ich nerve damit in letzter Zeit ... aber ich kapiere einfach nicht warum man sich (freiwillig!) soviel unnötige Arbeit und Fehlerquellen einhandeln will. :gruebel:

Delphi-Quellcode:
...procedure duawos(kind: By...
Das ist doch auch wieder nur eine lose Funktion. Würde es nicht viel mehr Sinn machen, sich eine passende Klassenstruktur zu entwerfen?
Gerade wo du doch den Code warten willst. ;)

SirThornberry 21. Apr 2005 20:58

Re: "variable" pointer -ist das möglich?
 
@Robert_G: Der Grund warum einige/viele/ich noch mit records arbeiten liegt zumindest bei mir daran das Klassen einen gewissen Overhead haben. Ein record verbraucht wirklich nur so viel arbeitsspeicher wie die zu haltenden Daten wirklich benötigen, bei klassen hingegen kommen mindestens noch variablen/methoden von TObject dazu.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Seite 1 von 2  1 2      

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