![]() |
DWORD Array...
Hallo zusammen!
Ich habe eine rein technische Frage: Ich schreibe an einem kleineren Logging Mechanismus, welcher auch Zustände, bzw. Typen einer Log-Meldung speichern soll. Ich habe mir deshalb "arrays" ausgesucht, welche ich in dieser Art schreibe:
Delphi-Quellcode:
type
// Logging STYLE array. Add new types only at the end of the list!! // Defines the style, read: What kind of error / ... happened RLogStyle = ( LOGSTYLE_NULL, LOGSTYLE_ERROR, LOGSTYLE_ACTION, LOGSTYLE_INFO ); Das Vorteilhafte daran ist, dass ich jederzeit diese neuen "Array Typen" einer Variablen zuweisen kann, also zum Bleistift:
Delphi-Quellcode:
Fein ist auch, dass ich dies einfach speichern und sogar später wieder einlesen und sogar in den ursprünglichen "Zustand" versetzen kann, durch simples Casting.
var LogStyle: RLogStyle;
In eine Datei schreiben....
Delphi-Quellcode:
Aus einer Datei lesen....
var LogStyle: RLogStyle;
begin LogStyle := LOGSTYLE_ERROR; SaveStringToFile( IntToStr( LogStyle ) ); end;
Delphi-Quellcode:
"ReadSomethingFromFile" ist einfach nur eine Beispielfunktion, die Daten aus einer Datei liest. So toll alles ist, auch Einschränkungen (und die sind für mich eigentlich ausschlaggebend) gibt es: Definiere ich einen Array fest (wie oben), kann ich nachträglich nicht einfach "zwischendrin" neue Einträge einfügen, da sich dann (logischerweise) auch der Wert verschiebt, was bedeutet, dass auch einem "LOGSTYLE_ERROR" schnell ein "LOGSTYLE_NULL" werden könnte.
var LogStyle: RLogStyle;
begin LogStyle := RLogStyle( StrToIntDef( ReadSomethingFromFile, 0 ) ); end; Eine andere Möglichkeit, die ich aufgeschnappt habe, wäre es Konstanten zu definieren und diese als DWORD zuzuweisen. Wobei ich aber auf ein einfaches Casting beim "Zurücklesen" verzichten und eine eigene Umwandlungsfunktion schreiben müsste. Was sicherlich nicht schlecht ist, jedoch doppelten Wartungsaufwand mit sich trägt:
Delphi-Quellcode:
Einmal bei der Konstantendeklaration selbst und dann in der Umwandlungfunktion, von Integer zu DWORD-Konstante... :(
const
// Defines the style, read: What kind of error / ... happened LOGSTYLE_NULL = 9000; LOGSTYLE_ERROR = 9100; LOGSTYLE_ACTION = 9200; LOGSTYLE_INFO = 9300; Jetzt meine Frage: Gibt es jemanden unter Euch, der ähnliches schonmal überlegt hat und eine optimale Lösung für diese Problematik (nenne ich sie jetzt einfach mal) gefunden hat? :stupid: Viele Grüße, moon |
Re: DWORD Array...
Zitat:
Das mit den DWORD Konstanten kannst du auch gleich beim deklarieren des Aufzählungstyps machen:
Delphi-Quellcode:
Wieso möchtest du die neuen Werte dazwischen einfügen statt sie einfach anzuhängen?
type
TMyEnum = (meOne = 100, meTwo = 200); |
Re: DWORD Array...
Hi,
schonmal danke für die Antwort. Man wird immer schlauer, "Enumeration" also. Den Tipp mit dem direkten zuweisen innerhalb der Enumeration habe ich bereits getestet und wird nicht zugelassen:
Code:
:(
[Fehler] logging.pas(11): ',' oder ')' erwartet, aber '=' gefunden
|
Re: DWORD Array...
Du hast ja auch kein Delphi 6 oder neuer (habe ich ganz übersehen).
|
Re: DWORD Array...
So ein Mist. :(
Leider kann ich das hier nicht updaten, da sehr viele Programme noch Verwurzelungen in das alte Delphi haben, sonst hätte ich schon längst ein neues angefordert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
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 by Thomas Breitkreuz