Thema: Delphi DWORD Array...

Einzelnen Beitrag anzeigen

moonwhaler

Registriert seit: 22. Dez 2005
57 Beiträge
 
Delphi 5 Enterprise
 
#1

DWORD Array...

  Alt 19. Sep 2007, 11:17
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:

var LogStyle: RLogStyle; 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.

In eine Datei schreiben....

Delphi-Quellcode:
var LogStyle: RLogStyle;
begin
  LogStyle := LOGSTYLE_ERROR;
  SaveStringToFile( IntToStr( LogStyle ) );
end;
Aus einer Datei lesen....

Delphi-Quellcode:
var LogStyle: RLogStyle;
begin
  LogStyle := RLogStyle( StrToIntDef( ReadSomethingFromFile, 0 ) );
end;
"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.

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:
const
  // Defines the style, read: What kind of error / ... happened
  LOGSTYLE_NULL = 9000;
  LOGSTYLE_ERROR = 9100;
  LOGSTYLE_ACTION = 9200;
  LOGSTYLE_INFO = 9300;
Einmal bei der Konstantendeklaration selbst und dann in der Umwandlungfunktion, von Integer zu DWORD-Konstante...

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?


Viele Grüße,
moon
  Mit Zitat antworten Zitat