AGB  ·  Datenschutz  ·  Impressum  







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

published set > 32bit

Ein Thema von RSE · begonnen am 21. Apr 2010 · letzter Beitrag vom 22. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

published set > 32bit

  Alt 21. Apr 2010, 15:51
Hallo,

obwohl das Thema sicherlich nicht allzu neu ist, finde ich bei Google doch nur Junk dazu, der mir nicht weiterhilft. Ich möchte die Eigenschaft
Delphi-Quellcode:
TKeySet = set of Char;
property AllowedKeys: TKeySet read FAllowedKeys write FAllowedKeys;
gerne published machen. Da mein set zu groß ist, geht das nicht. Grund: Die Standard-Streaming-Methoden, die für published-Elemente verwendet werden, kommen nur mit Sets bis max. 32bit zurande. Mehr macht auch keinen Sinn, wenn man den Standard-Property-Editor verwendet. Ich möchte aber sowieso einen eigenen Dialog Property Editor dafür bauen und würde auch eigene Routinen zum Schreiben und Lesen der Eigenschaften schreiben (mit TPersistent.DefineProperties), aber die Absicht alleine hält ja Delphi noch lange nicht von diesem Fehler ab...

Unter den von mir genannten Voraussetzungen sehe ich nun keinen Grund mehr für den Compilerfehler. Kann man den irgendwie abstellen? Wie würdet ihr an dieses Problem herangehen?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: published set > 32bit

  Alt 21. Apr 2010, 15:56
Der Grund ist, daß die Verwaltungs- und Streamingmethoden für die Publisched-Dinge nunmal nur mit Integer arbeiten und mit allem, was da irgendwie reinpaßt. (inklusive Typen mit internen Zeigern, wie Strings und Co.)

Dü könntest dein SET aber in einer Klasse kapseln.
$2B or not $2B
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#3

Re: published set > 32bit

  Alt 21. Apr 2010, 16:34
Eine eigene Klasse ist schon irgendwie mit Kanonen auf Spatzen schießen, zumal ein Set eben so schön handlebar ist mit dem in-Operator usw., aber wenn man die Standard Verwaltungs- und Streamingmethoden nicht anders aushebeln kann... Ich dachte es gäbe vielleicht eine Vorgehensweise ähnlich DefineProperties, für mein TKeySet speziell eigene Read- und Write-Methoden zu setzen, die den Standardmethoden zuvorkommen. Dann wäre das Problem ja schon gelöst. Aber dann müsste diese Vorgehensweise natürlich auch sicherstellen, dass ich einen eigenen Property Editor registriere... ist sicher so nicht lösbar. Dann werd ich mich wohl morgen mal an die Klasse machen.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#4

Re: published set > 32bit

  Alt 21. Apr 2010, 16:50
Wenn ich dich recht verstanden habe, musst du AllowedKeys einfach public statt published machen. Gestreamt wird's ja eh wegen DefineProperties.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: published set > 32bit

  Alt 21. Apr 2010, 16:54
Zitat:
[DCC Fehler] Unit2.pas(19): E2187 Größe von Published-Menge 'i' ist >4 Byte
Was mich aber grade irritiert ist, daß man ein Publisched-Property als Int64 (8 Byte), Double (auch 8 Byte) oder Extended (10 Byte) deklarieren kann.
$2B or not $2B
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#6

Re: published set > 32bit

  Alt 21. Apr 2010, 17:23
Als public wär das kein Problem, aber dann wirds ja auch nicht im OI angezeigt

Das Problem ist, dass (zumindest in D5) TSetProperty von TOrdinalProperty abgeleitet ist und dieses mit GetOrdValue arbeitet, welches Longint zurückliefert, also 32bit.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#7

Re: published set > 32bit

  Alt 21. Apr 2010, 18:32
Zitat von RSE:
Als public wär das kein Problem, aber dann wirds ja auch nicht im OI angezeigt
Ups. Ich dachte, DefineProperties würde dafür sorgen, dass... Das kommt davon, wenn man nicht testet.

Zitat von RSE:
Das Problem ist, dass (zumindest in D5) TSetProperty von TOrdinalProperty abgeleitet ist und dieses mit GetOrdValue arbeitet, welches Longint zurückliefert, also 32bit.
Schuss ins Blaue: Vielleicht kannst du ein "THugeSetProperty" schreiben, dass nicht von TOrdinalProperty abgeleitet ist, und selbiges für dein Set registrieren. (Ich teste schon wieder nicht.)
Uli Gerhardt
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#8

Re: published set > 32bit

  Alt 21. Apr 2010, 22:15
DefineProperties sorgt nur für die Speicherung im DFM, sonst nix. Für die Anzeige im OI ist published zuständig, genau das ist der Unterschied zwischen public und published.

Ob die Registrierung eines neuen Property Editors den Precompiler davon abhält, einen Fehler auszugeben, habe ich noch nicht ausprobiert, ich wage es aber schwer zu bezweifeln. Morgen früh werd ich es mal ausprobieren.

Edit:
Eben habe ich noch Folgendes gefunden, man beachte besonders Punkt 5:
Tutorial Warnungen und Hinweise vom Delphi Compiler
Vielleicht wird der Fehler ja auf diese Weise erzeugt. Ich schau mir die VCL-Quellen morgen früh noch mal genau an.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#9

Re: published set > 32bit

  Alt 22. Apr 2010, 08:37
Wie erwartet hält die Registrierung eines neuen Property Editors den Precompiler nicht davon ab, einen Fehler auszugeben Große Sets sind damit von vornherein im published ausgeschlossen. Also werde ich jetzt eine Klasse dafür bauen.

Mit der Message-Direktive wird übrigens in der VCL gar nicht gearbeitet.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: published set > 32bit

  Alt 22. Apr 2010, 08:54
Zitat von RSE:
Mit der Message-Direktive wird übrigens in der VCL gar nicht gearbeitet.
Meinst du das {$MESSAGE ...} ?

Mit sowas kann man auch nicht geziehlt Nachrichten z.B. via IF und CASE in einem laufendem Programm ausgeben, denn diese wird immer ausgegeben, wenn der Compiler dort vorbei kommt.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:51 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