Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TypeInfo von Variable abfragen (https://www.delphipraxis.net/144454-typeinfo-von-variable-abfragen.html)

himitsu 8. Dez 2009 08:44


TypeInfo von Variable abfragen
 
Halli Hallo,

kann man sich eigentlich auch die RTTI-Infos einer Variable besorgen
oder geht das immer nur über einen Typen?

Dieses ginge erstmal:
Delphi-Quellcode:
type
  TArr = array of String;
var
  Arr: TArr;
  Len: Integer;
begin
  //SetLength(Arr, 3);
  Len := 3;
  DynArraySetLength(Pointer(Arr), TypeInfo(TArr), 1, @Len);
end;
Aber ginge auch sowas?
Delphi-Quellcode:
var
  Arr: array of String;
  Len: Integer;
begin
  Len := 3;
  DynArraySetLength(Pointer(Arr), TypeInfo(Arr), 1, @Len);
end;                                   // ^^^
Ich möchte da Einiges gern vereinfachen und da wäre sowas schon praktisch.
(und es geht um die alte RTTI, bis mindestens D2006 oder gar bis D7)

schonmal Danke, dat :angel:-chen


[edit]
OK, hat sich erledigt. So wie geplant ginge es eh nicht, da sich System.FinalizeArray, bzw. System._FinalizeArray oder Finalize inkl. TypeInfo-Angabe nicht direkt aufrufen läßt. :cry:

negaH 8. Dez 2009 12:44

Re: TypeInfo von Variable abfragen
 
Zitat:

OK, hat sich erledigt. So wie geplant ginge es eh nicht, da sich System.FinalizeArray, bzw. System._FinalizeArray oder Finalize inkl. TypeInfo-Angabe nicht direkt aufrufen läßt.
Doch geht nach meiner Erfahrung. Probiere mal Assembler

Delphi-Quellcode:
asm
  call System.@FinalizeArray
// oder
  call @FinalizeArray
end;
Gruß Hagen

himitsu 8. Dez 2009 12:55

Re: TypeInfo von Variable abfragen
 
Nja, ich wollte den Code an ein paar Stellen übersichtlicher/kürzer gestalten und daher nicht gleich mit Assembler anfangen.
Abgesehn davon kann man sowas dann leider als nicht Inline-Funktion deklarieren, welches für eine Optimierung schon praktisch wäre.
PS: darum meinte ich auch "nicht direkt aufrufen läßt." :angel:

Es ging mir hier um dynamische Arrays und das Entfernen von Einträgen (in der Mitte).
Speziell wollte ich eine "Löschfunktion" für mehrere unterschiedliche Arrays implementieren, anstatt die "fast" gleiche Befehlsfolge mehrmals im Code zu haben.

Hatte da auch schon die Idee eventuell auf TList-Derivate umzusteigen, aber dieses wurde Aufrund einiger Nachteile verworfen, da die Vorteile nicht überwogen ... gleichstand, was wiederum den Aufwand einer Umstellung nicht unbedingt rechtfertigte.

Aber dennoch dank :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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