AGB  ·  Datenschutz  ·  Impressum  







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

Arrays, dynamisch-->statisch

Ein Thema von Majortomster · begonnen am 2. Jun 2005 · letzter Beitrag vom 29. Sep 2007
Antwort Antwort
Seite 2 von 2     12   
Phistev
(Gast)

n/a Beiträge
 
#11

Re: Arrays, dynamisch-->statisch

  Alt 3. Jun 2005, 16:43
Deklarier dein dyn. Array als array of TVarRec, nicht als array of variant. Dann sollt's klappen (bei mir hat's funktioniert). Zum Typ TVarRec (System.pas):
Delphi-Quellcode:
  TVarRec = record { do not pack this record; it is compiler-generated }
    case Byte of
      vtInteger: (VInteger: Integer; VType: Byte);
      vtBoolean: (VBoolean: Boolean);
      vtChar: (VChar: Char);
      vtExtended: (VExtended: PExtended);
      vtString: (VString: PShortString);
      vtPointer: (VPointer: Pointer);
      vtPChar: (VPChar: PChar);
      vtObject: (VObject: TObject);
      vtClass: (VClass: TClass);
      vtWideChar: (VWideChar: WideChar);
      vtPWideChar: (VPWideChar: PWideChar);
      vtAnsiString: (VAnsiString: Pointer);
      vtCurrency: (VCurrency: PCurrency);
      vtVariant: (VVariant: PVariant);
      vtInterface: (VInterface: Pointer);
      vtWideString: (VWideString: Pointer);
      vtInt64: (VInt64: PInt64);
  end;
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#12

Re: Arrays, dynamisch-->statisch

  Alt 7. Jun 2005, 10:07
Das hört sich doch sehr interessant an.
Aber wie füllt man ein TVarRec?
Bei einer einfach Zuweisung wie zuvor mit dem Variant Array klappt es nicht:
Delphi-Quellcode:
var
findarray : array of TVarRec;
...
begin
...
      for i := 0 to temp do
      begin
         findarray[i] := lds.FieldValues[tempStrs.Strings[i]]
      end;
...
end;
Wie geht das?

T
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#13

Re: Arrays, dynamisch-->statisch

  Alt 7. Jun 2005, 10:11
in der unit variants gibts allerhand hilfsfunktionen/prozeduren die dir dabei helfen sollten
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#14

Re: Arrays, dynamisch-->statisch

  Alt 7. Jun 2005, 10:19
[Fehler] sqlreplace.pas(895): Inkompatible Typen: 'TVarRec' und 'Variant'

Das kommt bei der normalen Zuweisung ... ich kriegs nicht hin

T
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#15

Re: Arrays, dynamisch-->statisch

  Alt 7. Jun 2005, 10:43
Nächster Fehlschlag:
Mit folgender Änderung lässt es sich kompilieren und ausführen:

Delphi-Quellcode:
...
      for i := 0 to temp do
      begin
         findArray[i].VType := vtVariant;
         test := lds.FieldValues[tempStrs.Strings[i]];
         findarray[i].VVariant := @test;
      end;
...
Aber dies verursacht zur Laufzeit eine Zugriffsverletzung und zwar schon bei Zuweisung des VType-Feldes. "Zugriffsverletzung bei Adresse blabla in Modul 'delDB.exe'. Schreiben von Adresse 000000004."

Wie funktioniert dieses TVarRec? Nirgends findet man Dokus oder Beispiele

T
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#16

Re: Arrays, dynamisch-->statisch

  Alt 7. Jun 2005, 11:37
Du sagst, das FindKey ein statisches Array braucht? Dann hat es doch definitiv eine feste Länge. Heisst du musst dich daran halten, ob du willst oder nicht. Wie sieht denn die Paramater Beschreibung von FindKey aus?
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Arrays, dynamisch-->statisch

  Alt 7. Jun 2005, 11:58
Angeblich : Variant == TVarData. Also solltest Du dein Array Of TVarData so füllen können:
Delphi-Quellcode:
for i := 0 to temp do
    findArray[i] := TVarData (lds.FieldValues[tempStrs.Strings[i]]);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#18

Re: Arrays, dynamisch-->statisch

  Alt 29. Sep 2007, 10:43
Delphi-Quellcode:
var
  Test : array [0..0] of TVarRec;
  extendedVal: Extended;
begin
  extendedVal := StrToFloat(Edit1.text);
  Test[0].VExtended := @extendedVal;
  Label1.Caption := Format('%8.2f', [extended(Test[0].VExtended^)]);
so klappte es bei mir.
schau dir aber sicherheitshalber noch einmal die dokumentation zu tvarrec an.
wenn du was neues weist poste mal bitte.
interessiert mich auch das ganze.
  Mit Zitat antworten Zitat
kolbaschedder

Registriert seit: 24. Aug 2006
Ort: Schwäbisch Gmünd
55 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Arrays, dynamisch-->statisch

  Alt 29. Sep 2007, 11:23
Hallo Jungs,

ich hab das ganze hier nur mal so grob überflogen. Das mit den statischen Geschichten lässt sich für gewöhnlich mit folgendem Trick übergehen.

Delphi-Quellcode:

type
  TStaticArray = array[0..16000] of Integer;
  PStaticArray = ^TStaticArray;

procedure Wasauchimmer;
var
  pArr = PStaticArray;
begin
  getMem(pArr, 100*SizeOf(Integer));
// Jetzt Array Füllen
// Aufruf dann ungefähr so
  FindKey(pArr^, ..,..);

end;
  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 08:50 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