AGB  ·  Datenschutz  ·  Impressum  







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

Konstante mit dynamischem Array?

Offene Frage von "himitsu"
Ein Thema von himitsu · begonnen am 7. Apr 2005 · letzter Beitrag vom 4. Jun 2005
Antwort Antwort
Seite 2 von 2     12   
NicoDE
(Gast)

n/a Beiträge
 
#11

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 14:38
Zitat von himitsu:
Wie gesagt, es ist genau so gewollt, dass es als Record und nicht über Pointer und Klassen abläuft.
Array of Integer ist ein Pointer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#12

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 14:44
Ich weiß, dass Array of ... ein Pointer ist

Ich meinte aber die Art der Übergabe des gesamten Records an die Prozedur.

Und untüpisiert ist auch so ein Problem ... es gibt da manchmal noch überladene Proceduren ... es gibt ja unterschiedliche Records.

Es gibt insgesamt 4 Records ... jeweil 2 mit 'nem dynamischem Array und dann nochmal von diesen jeweile eine spezielle Version mit statischem Array.

Und einige Konstanten ab ich auch schon mit Hilfe der statischen Versionen definieren können, aber derzeit gibt es auch zwei Konstanten, deren Datenmenge leider nicht in diese statischen Versionen reinpasst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
opfer.der.genauigkeit

Registriert seit: 14. Feb 2005
66 Beiträge
 
#13

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 14:53
Zitat von himitsu:
Bei Var-Parametern wird das mit der kompatibilität von Parametern ja noch viel schlimmer -.-''

dort muß der Parameter ja genau überainstimmen ... dort geht ja noch nichtmal die übergabe von statischen an dynamischen Arrays.
Wo muß da der Parameter übereinstimmen, wenn der Parameter keinen Typen besitzt?
Vielleicht übersehe ich da ja irgendwas, aber bei der Deklaration:

var aTest Kann ich fast alles übergeben.. Sollte eben ein var- Parametersein.

Delphi-Quellcode:
procedure Test(var aTest);
var
  a: T1 absolute aTest;
begin
  a.a := 1;
  a.b := 2;

...
end;
Das Einzige, was du dort rauskriegen mußt, ist ob nun T1 oder T2 übergeben wurde.
Stellen Sie sich bitte Zirkusmusik vor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#14

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:12
@Opfer:

Ja Intern ist das sogut wie Egal, aber aber von Außerhalb nicht.


Ich brauche ja keine "interne" Umwandlung, sondern ich habe externe Übergabeprobleme.
Delphi-Quellcode:
Procedure Test(Var i: Integer);


Var i1: Integer;
  i2: Type Integer;

Test(i1);
Test(i2); << Probleme

Also es git sozusagen keine (für meine Zwecke) passende Möglichkeit, um zwei unterschiedliche Typen zu übergeben.

Und derzeit gibt es eben diese Probeme, um ein Dynamisches Array als Konstante zu definieren und entsprechend vorzubelegen.

Und nur für diese zwei Konstanten jetzt nochmal einen neuen Type mit noch größerem statischem Array und dann noch die hunderten dazupassenden Prozeduren/Funktionen (was ja massig Arbeit macht) anzulegen ist auch nicht so gut.


Aber mir ist gerade was eingefallen ... mal sehn, ob ich nicht mit ASM ein dynamisches Array vorbelegen kann ... werd' es heute Abend mal versuchen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#15

Re: Konstante mit dynamischem Array?

  Alt 9. Apr 2005, 12:00
OK, ich hab jetzt 'ne "gute" Lösung gefunden.

Im Grunde genommen definiere ich jetzt selber die interne Datenstruktur der dynamischen Arrays (dieses kann man ja überall und in jedem anderem beliebigem Datentyp erledigen ... ASM, Stream ... aber ich hab's der Einfachheit halber über Statische Arrays gemacht, do ich dort ja die Datenwerte im selben Format angeben kann) und weises den Arrays dann nur noch den Zeiger darauf zu.


PS: wer kennt nicht diesen Referenzen (RefCount) und ElementAnzahl bei Strings.
Intern sind Strings und Arrays ja gleich aufgebaut und wie ich jetzt mitbekommen hab, gibt es nicht nur dieses Zwei werte, sondern unter Umständen noch einen 3. Wert und RefCount ist nicht immer RefCount...
Aber genaueres dazu werde ich demnächst mal Veröffentlichen ... erstmal sehn, obs da nicht noch mehr gibt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hardy1234

Registriert seit: 8. Aug 2004
Ort: Hamburg
26 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Konstante mit dynamischem Array?

  Alt 4. Jun 2005, 18:35
Doch gibt es, mit sogenannten varianten records. Der Tip mit:

Delphi-Quellcode:
  
  procedure yxz(var Buf);
war übrigens für sowas goldrichtig. Das ist ein untypisierter Puffer, der jeden beliebigen Typ aufnimmt. Nun kommt es halt auf die Struktur an die ankommt. Man könnte folgendes machen:

Delphi-Quellcode:

type

  TMyStruct = record
    case StructDef: integer of
      1:(Feld1_1: string; Feld2_1: integer; Feld3_1: array of real);
      2:(Feld1_2: string; Feld2_2: integer; Feld3_2: real);
    end;
  end;

procedure xyz(var Buf);
var
  a: TMyStruct;
begin
  a:= TMyStruct(Buf);
  {*** und nun kannste anfangen das abzuarbeiten ***}
  case a.StructDef of
    1: begin
    end;
    2: begin
    end;
  end; // of case
end; // of procedure xyz(var Buf);
Der Trick besteht darin, das variante Records so ziemlich alles aufnehmen können. Sie belegen gerade soviel Platz wie nötig. Nachteil ist, das strings nur maximal 255 Zeichen haben dürfen. Das läßt sich aber mit PChar ebenfalls umgehen.

Beachten mußt du lediglich, das die Feldnamen eindeutig sein müssen. Du darfst nicht 2mal den gleiche Variablennamen verwenden. Deswegen im Beispiel die Indizierung, damit sind sie dann eindeutig und können trotzdem ähnlich sein.

Die records sind für manche Sachen immer noch 1. Wahl, wie man an dem Bsp. sehen kann. Ich würde mir die Dinger mal genauer ansehen, da kann man im Zusammenhang mit strukturierten Konstanten noch erheblich mehr rausholen.
Es gibt keinen schöneren Tag als den heutigen. Der gestrige ist vorbei und von den kommenden weiß man nicht was sie bringen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:17 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