![]() |
Probleme mit dem Aufruf von reg.ReadBinaryData
Hallo,
ich möchte eigentlich aus einem DWord in der Registry die Daten auslesen. Ich habe alles denke ich korrekt initialisiert, finde meinen Pfad auch mit reg.RootKey reg.OpenKey reg.GetValueNames Das funktionier soweit alles. Nur aus dem ReadBinaryData werde ich nicht schlau. Egal wie ich es aufrufe, immer bekomme ich irgendwelche Fehlermeldungen. Die OH hilft mir auch nicht, da ich es nicht verstehe, was die mit der Var Buffer und mit BufSize wollen. Ich habe versucht da Variablen anzulegen, aber nichts was ich gemacht habe hat funktioniert. Wie muss ich den Befehl aufrufen, dass er mir in das Array of Integer (items) die Daten reinschreibt? Er gibt sie doch als Int-Wert zurück, oder? Wenn ich nur items[0] := reg.ReadBinaryData('Software\...\ItemID1'); schreibe bekomme ich natürlich "nicht genügend Parameter" als Fehlermeldung zurück, aber wie und welche Parameter muss ich noch angeben (... steht für den ermittelten ewig langen Pfad) Vielen Dank im Voraus und ich hoffe es gibt einen einfachen Aufruf, ähnlich wie bei ReadInteger oder so... Chrissi |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
also ich hab es weiter versucht: Mein Aufruf sieht nun so aus:
reg.OpenKey('Software\...\Inventory',FALSE); // ... steht für den kompletten Pfad reg.ReadBinaryData('ItemID'+IntToStr(1),buff,sizeo f(buff)); wobei ich die Variable buff definiert habe als: Byte, DWord, Integer, String Ich erhalte immer die Fehlermeldung: Im Projekt Project1.exe ist eine Exception der Klasse ERegistryException aufgetreten. Meldung: 'Ungültiger Datentyp für 'ItemID1''. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. Und wenn ich fortsetze bekomme ich noch ne Fehlermeldung Ungültiger Datentyp für 'ItemID1' Als was muss ich buff denn bitte deklarieren ? Der Registry-Inhalt ist ein DWord Wert in Hexadezimal ... |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
wenn du in der Registry den Wert als DWord abspeicherst musst du diesen mit ReadInteger lesen.
Zitat:
|
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
ja danke, so ist es richtiger ausgedrückt.
Mein Problem ist aber, dass ich mit ReadInteger immer folgende Fehlermeldung bekomme: Im Projekt Project1.exe ist eine Exception der Klasse ERegistryException aufgetreten. Meldung: 'Konnte Daten für 'Software\...\ItemID1' nicht holen.' Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. Und nach Start: Konnte Daten für 'Software\...\ItemID1' nicht holen. Mein Aufruf: items[0] := reg.ReadInteger('Software\...\ItemID'+IntToStr(1)) ; // ... steht weiterhin für den kompletten Pfad Das hatte ich auch schon versucht. Ich kriege diesen Wert einfach nicht ausgelesen. Ist evtl. mein Pfad falsch ? Er geht ist Software\...\Inventory darin liegt der DWord Wert ItemID1 dessen Wert von Regedit hexadezimal dargestellt wird. |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
den Pfad musst du bei "OpenKey" angeben und bei "ReadInteger" brauchst du dann nur noch den Valuenamen angeben
|
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
Das hatte ich auch schon probiert:
reg.OpenKey('Software\...\Inventory\',FALSE); items[0] := reg.ReadInteger('ItemID'+IntToStr(1)); aber da bekomme ich dann die Fehlermeldungen: Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00447EDC in Modul 'PROJECT1.EXE'. Lesen von Adresse FFFFFFFF' Prozess ... und Zugriffsverletzung bei Adresse 00447EDC in Modul 'PROJECT1.EXE'. Lesen von Adresse FFFFFFFF Daher hatte ich den Pfad dann in den ReadInteger Befehl mit reingenommen. Wo liegt denn da mein Fehler, kompilieren tut er es ohne zu meckern. |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
Gibt es denn den Schlüssel? Und in welchem Root liegt der? Und hast du den Root-Key gesetzt?
Zeig dochmal die ganze Routine und nicht nur so Bruchstücke mit denen keiner was anfangen kann. |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
Delphi-Quellcode:
In den ComboBoxen wählt man Verzweigungen im Pfad. Der Pfad selbst existiert, das habe ich nachgeprüft in der Regedit. Das wählen mit den Comboboxen geht auch, ich habe mit den Pfad bis zum DWord Wert ItemID1 schon in memo1 anzeigen lassen, das klappt also. Nur das Auslesen des Wertes aus dem DWord-Schlüssel ItemID1 klappt einfach nicht.
procedure TForm1.Button3Click(Sender: TObject);
var reg: TRegistry; begin { - Erzeugen und initialisieren - } reg := TRegistry.Create; if ComboBox2.Text = 'Charakter wählen' Then Abort; if ComboBox2.Text = '' Then Abort; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey ('Software\Vircom\T4C\'+ComboBox1.Text+'\Characters\'+ComboBox2.Text+'\Inventory\',FALSE); items[0] := reg.ReadInteger('ItemID'+IntToStr(1)); memo1.Lines.Add(IntToStr(items[0])); { - Aufräumen - } FreeAndNil(reg); end; als globale Variable ist noch definiert: items: array of Integer; [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
Hi chrissi,
als Fehler kann ich mir nur vorstellen, dass der Fehler beim Schreibzugriff auf items[0] entsteht. (Abgesehen davon dass die Resourcenschutzblöcke fehlen). Versuche mal,
Delphi-Quellcode:
vor dem Zugriff auf Items[0] auszuführen.
SetLength(items, 1);
Greetz alcaeus [add]Und bitte verwende in Zukunft die [delphi]-Tags, damit der Code lesbarer wird.[/add] |
Re: Probleme mit dem Aufruf von reg.ReadBinaryData
Ja das war der Fehler, vielen herzlichen Dank. Mit dem SetLength funktioniert es.
Wie ist das mit den Delphi-Tags gemeint ? Ich habe das per copy&paste reinkopiert ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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-2025 by Thomas Breitkreuz