Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit dem Aufruf von reg.ReadBinaryData (https://www.delphipraxis.net/31398-probleme-mit-dem-aufruf-von-reg-readbinarydata.html)

chrissi 8. Okt 2004 14:16


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

chrissi 9. Okt 2004 11:06

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

SirThornberry 9. Okt 2004 11:45

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:

Der Registry-Inhalt ist ein DWord Wert in Hexadezimal ...
richtiger wäre: "der Registry-Inhalt ist ein DWord und wird von dem Program "Regedit" Hexdezimal dargestellt

chrissi 9. Okt 2004 12:27

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.

SirThornberry 9. Okt 2004 12:33

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

chrissi 9. Okt 2004 15:02

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.

Luckie 9. Okt 2004 16:13

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.

chrissi 9. Okt 2004 16:21

Re: Probleme mit dem Aufruf von reg.ReadBinaryData
 
Delphi-Quellcode:
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;
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.

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]

alcaeus 9. Okt 2004 16:29

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:
SetLength(items, 1);
vor dem Zugriff auf Items[0] auszuführen.

Greetz
alcaeus

[add]Und bitte verwende in Zukunft die [delphi]-Tags, damit der Code lesbarer wird.[/add]

chrissi 9. Okt 2004 16:33

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.
Seite 1 von 2  1 2      

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