Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Datentypen Fehler

Empfohlene Antworten

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

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?

hab jetzt nochmal genau gekuckt, ist ein dword-wert.

wie lese ich den denn aus? readdword gibts nicht.

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.

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?

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 ! ;)

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.

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).

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.