Psycho Fred Geschrieben 1. September 2003 Geschrieben 1. September 2003 hallo miteinander, ich schreibe ein programm, mit dem ich bestimmte werte aus der registry auslesen kann. das klappt auch teilweise ganz gut. nur bekomme ich nun eine fehlermeldung, die wohl mit den datentypen zusammenhängt: 'ungültiger Dateientyp für "Version".' hier die variablen deklaration: Z1c: String[200]; hier die prozedur, an der es hängt. begin reg:=TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey ('Software\Compugroup\Z1', TRUE) then Z1c := Reg.ReadString('Version') finally Reg.CloseKey; Reg.Free; end; end; Z1c wird dann nachher in einem label ausgegeben. "Version" hat als inhalt den hexa wert 1e. kann ich das problem irgendwie auf die schnelle lösen, ohne das ich das ganze programm umschmeissen muss? danke im voraus. fred Zitieren
grueni Geschrieben 1. September 2003 Geschrieben 1. September 2003 Wie wäre es mit "string" anstatt "string[200]" ? Zitieren
geloescht_JesterDay Geschrieben 1. September 2003 Geschrieben 1. September 2003 Original geschrieben von Psycho Fred "Version" hat als inhalt den hexa wert 1e. kann ich das problem irgendwie auf die schnelle lösen, ohne das ich das ganze programm umschmeissen muss? Ist Version überhaupt ein String Wert? Zitat aus der Hilfe: Enthält der Registrierungseintrag keinen String, wird eine Exception ausgelöst Hinweis: ReadString liest Daten, die mit einer der Methoden WriteString oder WriteExpandString gespeichert wurden. oder ist das vielleicht ein Binär- oder DWord-Wert? Zitieren
Psycho Fred Geschrieben 1. September 2003 Autor Geschrieben 1. September 2003 hab jetzt nochmal genau gekuckt, ist ein dword-wert. wie lese ich den denn aus? readdword gibts nicht. Zitieren
grueni Geschrieben 1. September 2003 Geschrieben 1. September 2003 Aus der Delphi-Hilfe: Die Variable DWORD repräsentiert einen 4-Byte-Integer. Unit Windows type DWORD = Longword; Beschreibung DWORD (Double Word) wird in der Windows-Programmierung zur Darstellung eines 4-Byte-Integers verwendet.. Also würd ichs mal mit nem ReadInteger versuchen. Zitieren
Psycho Fred Geschrieben 2. September 2003 Autor Geschrieben 2. September 2003 danke für deine bisherige hilfe. wenn ich Z1c als Dword deklariere und mit readinteger auslese, bleibt der compiler an dieser stelle stehen: Form2.Label18.Caption := Z1c; also bei der ausgabe. mit der meldung: Inkompatible Typen 'String' und 'cardinal'. woran kann das liegen? Zitieren
grueni Geschrieben 2. September 2003 Geschrieben 2. September 2003 readInteger gibt wie der Name schon sagt einen Integer zurück. Du mußt eine Typumwandlung machen, um die Label-Caption zuweisen zu können. (btw. Cardinal ist auch ein Integer-Typ). Also z.B. aRegValue: Integer; .... (*some code*) ... aRegValue := aReg.ReadInteger(.... lblRegValue.Caption := intToStr(aRegValue); Ich hoffe das hilft dir weiter. Edit: Das müßte auch mit DWord klappen, wichtig ist der intToStr bei der Zuweisung der Label-Caption, weil die einen String erwartet und keine Ganzzahl. BTW: Zc1 ist kein wirklich schöner Variablenbezeichner, wenn du in einem Team progst machst du dir so keine Freunde ! Zitieren
Psycho Fred Geschrieben 2. September 2003 Autor Geschrieben 2. September 2003 wenn ich das so mache, läuft der compiler zwar durch, aber sobald er die daten auslesen soll, bricht das programm mit der fehlermeldung: Debugger Exception: Im Projekt ist eine Exception der Klasse ERegistry Exception aufgetreten. Meldung: Fehler beim Holen der Daten. also stimmt da immer noch irgendwas mit den datentypen nicht. hier der quellcode dazu: Z1c: Integer; Z1c := Reg.ReadInteger('Version'); Form2.Label18.Caption := inttostr(Z1c); danke für deine mühe. Zitieren
grueni Geschrieben 2. September 2003 Geschrieben 2. September 2003 Original geschrieben von Psycho Fred Z1c: Integer; Z1c := Reg.ReadInteger('Version'); Form2.Label18.Caption := inttostr(Z1c); danke für deine mühe. Fast richtig, deklarier Z1c als DWord, der Rest müßte hinhauen. Wie gesagt der intToStr bei der Zuweisung der Caption ist das Entscheidende. (intToStr geht auch mit DWord, habs grad ausprobiert). Zitieren
Psycho Fred Geschrieben 2. September 2003 Autor Geschrieben 2. September 2003 hab den fehler gefunden, danke für deine mühe. ich musste noch in der prozedur abfangen, was ist, wenn der gesuchte schlüssel version nicht da ist. die zeile hiess dann if Reg.OpenKey ('Software\Compugroup\Z1', TRUE) then if reg.valueexists('Version') then Z1c := Reg.ReadInteger('Version'); danke nochmals fred Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.