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 Speicherung von Sets... ?!? (https://www.delphipraxis.net/41242-speicherung-von-sets.html)

himitsu 10. Apr 2009 08:24

Re: Speicherung von Sets... ?!?
 
Ich hab ein kleines Problem mit TypInfo.GetSetProp.

und zwar verreckt dieses mit einer Exception,
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0041A89D in Modul 'Project1.exe'. Lesen von Adresse 00000000' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
wenn das Set Leerstellen enthält.

dieses geht ohne Probleme:
Delphi-Quellcode:
TXMLNodeType = (xtInstruction, xtTypedef, xtElement, xtCData, xtComment, xtUnknown);
TXMLNodeTypes = Set of TXMLNodeType;

TXMLNodeType = (xtInstruction, xtTypedef, xtElement, xtCData, xtComment, xtUnknown=5);
TXMLNodeTypes = Set of TXMLNodeType;
hier kommt die Exception:
Delphi-Quellcode:
TXMLNodeType = (xtInstruction, xtTypedef, xtElement, xtCData, xtComment, xtUnknown=6);
TXMLNodeTypes = Set of TXMLNodeType;

TXMLNodeType = (xtInstruction, xtTypedef, xtElement, xtCData, xtComment, xtUnknown=31);
TXMLNodeTypes = Set of TXMLNodeType;

Reinhard Kern 10. Apr 2009 08:58

Re: Speicherung von Sets... ?!?
 
Zitat:

Zitat von Kedariodakon
...Aber eine Frage ist immer noch offen, ist die SetVariable von sich aus schon so groß wie das volle Set einnimmt?

Hi,

die Grösse ist ja zur Compile Time bekannt, daher ist ein Set of 1..5 nur 1 Byte, ein Set of Byte 32 Byte gross.

@shmia: 256 / 8 = 32 !

Gruss Reinhard

himitsu 10. Apr 2009 09:05

Re: Speicherung von Sets... ?!?
 
Zitat:

Zitat von Reinhard Kern
die Grösse ist ja zur Compile Time bekannt, daher ist ein Set of 1..5 nur 1 Byte, ein Set of Byte 32 Byte gross.

das mit der CompileTime stimmt, aber die Größen nicht

{$MinimumEnumSize} = 4, dann ist auch ein Set mit nur 1 Wert drin auch 4 Byte.


zu meinem Problem:
ich versuch die TypInfo grad zu zerlegen
und der Fehler liegt vermutlich in der Internen TypInfo.InternalGetPropInfo (k.A. eventuell Stack zersört), aber abStürzen tut es dann am Ende (end;) von FindPropInfo.

[add] ach ja ... Delphi2009 (probier heut abend mal eine ältere Version)

[edit]
TypInfo.InternalGetPropInfo isses doch nicht ... weiter geht die Suche im anderen TypInfo.GetSetProp :x

himitsu 10. Apr 2009 10:17

Re: Speicherung von Sets... ?!?
 
so, hab die letzte Stunde versucht die TypInfo zu debuggen ...

Delphi-Quellcode:
TTypeData > tkSet: (CompType: PPTypeInfo));
bei Sets mit freien Stellen ist CompType nicht vorhanden (= nil) :shock:

in der TypInfo.SetToString wird dieses hier
Delphi-Quellcode:
GetTypeData(PropInfo^.PropType^)^.CompType
aufgerufen, liefert nil und da es daraufhin ungeprüft dereferenziert wird,
Delphi-Quellcode:
TypeInfo := GetTypeData(PropInfo^.PropType^)^.CompType^;
knallt es.


die Frage ist nur, warum gibt es, bei sowas
Code:
TXMLNodeType = (xtInstruction, xtTypedef, xtElement, xtCData, xtComment, xtUnknown[color=#ff0000][b]=6[/b][/color]);
TXMLNodeTypes = Set of TXMLNodeType;
, keine PPTypeInfo mehr? :?

[edit=alzaimar]'freuen' -> 'freien' auf Bitten des Beitragverfassers. Mfg, alzaimar[/edit]

himitsu 5. Mai 2009 16:39

Re: Speicherung von Sets... ?!?
 
http://fnse.de/S02/15S.gif

hat da jemand 'ne Idee, wie man das elegant umgehen kann,
bzw. ob doch irgendwie die TypeInfo herzubekommen ist,
wenn man einen Set mit leeren Stellen hat?


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

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