Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Adresse eines dynamischen typisierten Arrays als Parameter (https://www.delphipraxis.net/40076-adresse-eines-dynamischen-typisierten-arrays-als-parameter.html)

Thomas233 15. Feb 2005 11:42

Re: Adresse eines dynamischen typisierten Arrays als Paramet
 
So, ich hab jetzt alle Arrays auf TList-Klassen umgestellt und verwalte die ganzen Pointer ab sofort in den TList-Klassen.
Durch den selben Trick den ich auch schon bei den Arrays angewendet habe, ich deklariere bei der Übergabe eines Parameters an eine Funktion einen Zeiger auf eine Basisklasse übergebe dann aber einen Zeiger auf eine von der Basisklasse abgeleitete Klasse, brauche ich mich gar nicht mehr mit der Casterei herumschlagen. Ist zwar nicht sonderlich objektorientiert, aber immerhin habe ich mir dadurch einigen Aufwand erspart.

Jetzt stellt sich mir nur das folgende Problem:
Da ich bei dem erzeugen einer neuen Klasse diese nicht lokal anlegen darf sondern nur global kann ich bei der Erzeugung nicht ohne Pointer arbeiten.
Ich deklariere nun also einen Pointer auf eine Klasse welcher sich lokal in einer Funktion befindet. Wie muss ich es nun anstellen das der Pointer auf einen für die Klasse reservierten Speicherbereich zeigt und die Klasse auch initialisiert wurde (d.h. der Konstruktor müsste auch aufgerufen werden) ?

Vielen Dank im Vorraus !

Liebe Grüße,
Thomas

dizzy 15. Feb 2005 12:11

Re: Adresse eines dynamischen typisierten Arrays als Paramet
 
Also im Grunde so etwas: (?)
Delphi-Quellcode:
procedure GenerateInstance(Liste: TList);
var
  p: ^TDeineKlasse;
begin
  p^ := TDeineKlasse.Create;
  Liste.Add(Pointer(p));
end;
(in etwa - kann leicht anders sein...)

Du brauchst an sich dafür keinen lokalen Pointer, sondern kannst die Instanzerzeugung im Add machen:
Delphi-Quellcode:
procedure GenerateInstance(Liste: TList);
begin
  Liste.Add(TDeineKlasse.Create);
end;
Sinn kann es aber dann machen, wenn du vor dem Hinzufügen zur Liste noch mit der Instanz hantierst.

Thomas233 15. Feb 2005 19:39

Re: Adresse eines dynamischen typisierten Arrays als Paramet
 
Hmm....klappt nicht:

Delphi-Quellcode:
var Model:^TD3DXmodel;

Model^:=TD3DXModel.Create(D3DEngine.D3d9Device);

Model^.Tuwas;
//Zugriffsverletzung !
Vielen Dank im Vorraus !

Liebe Grüße,
Thomas

Chewie 15. Feb 2005 20:07

Re: Adresse eines dynamischen typisierten Arrays als Paramet
 
Klar geht das nicht, du musst dir noch Speicher für deine Objektreferenz anfordern (mit New).

Thomas233 15. Feb 2005 21:37

Re: Adresse eines dynamischen typisierten Arrays als Paramet
 
Achso, danke, genau DAS wollte ich wissen.

Thx nochmal !

Liebe Grüße,
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.
Seite 3 von 3     123   

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