ReadBinaryData() - Problem
Morgen zusammen,
Ich will Daten aus der Registry mit Hilfe der Methode ReadBinaryData() auslesen. Folgendermaßen rufe ich diese auf:
Delphi-Quellcode:
'EDID' Verweist auf den Wert in der Registry, der ist vom Typ "REG_BINARY". Info ist eine Struktur (EDID-Header für Monitorinformationen), welche die Daten erhalten soll. Es sollen auch nur 128 Bytes dahin kopiert werden.
Registry.ReadBinaryData('EDID', Info, 128);
Soweit so gut. Beim Aufruf kommt eine ERegistryException: "Ungültiger Datentyp für 'EDID'" Ist hiermit gemeint, dass der Wert in der Registry den falschen Datentyp oder evtl. die Struktur in welche die Daten letztendlich sollen, vom falschen Typ sind? Ich höffe jemand kann mit wieterhelfen. Vielen Dank schonmal. Gruß, Philipp |
Re: ReadBinaryData() - Problem
Hat denn niemand ne Idee?
|
Re: ReadBinaryData() - Problem
Zitat:
Deshalb:
Delphi-Quellcode:
if Registry.GetDataType('EDID') <> rdBinary then
Raise Exception.CreateFmt('Registry-Key %s ist nicht binär!', ['EDID']); // sicherheitsprüfung if sizeof(info) < 128 then raise Exception.Create('UPS! Info Struktur zu klein!'); Registry.ReadBinaryData('EDID', Info, 128); |
Re: ReadBinaryData() - Problem
Hallo shmia,
Danke für deine Antwort! Leider wird keine der beiden Exceptions ausgelöst, d.h. der Typ muss Binary sein und die Info-Struktur ist auch nicht zu klein... Wenn ich im Regedit nachschaue, dann steht da schon "REG_BINARY" als Datentyp. Sonst noch irgendwelche Ideen, bzw. Einfälle? |
Re: ReadBinaryData() - Problem
Zitat:
Namenskonflikt mit der Unit registry.pas führen. :gruebel: Kopiere doch mal die Unit registry.pas in das Verzeichnis mit deinem Sourcecode und füge die Unit zum Projekt hinzu. Danach kannst du einen Breakpoint setzen und in die Funktion ReadBinaryData hineindebuggen.
Delphi-Quellcode:
Also ich vermute jetzt: die Daten in dem Registry-Key sind länger als 128 Bytes. :idea:
resourcestring
SInvalidRegType = 'Ungültiger Datentyp für ''%s'''; procedure ReadError(const Name: string); begin raise ERegistryException.CreateResFmt(@SInvalidRegType, [Name]); end; function TRegistry.ReadBinaryData(const Name: string; var Buffer; BufSize: Integer): Integer; var RegData: TRegDataType; Info: TRegDataInfo; begin if GetDataInfo(Name, Info) then begin Result := Info.DataSize; RegData := Info.RegData; if ((RegData = rdBinary) or (RegData = rdUnknown)) and (Result <= BufSize) then GetData(Name, @Buffer, Result, RegData) else ReadError(Name); // <=== hier wird dein Code wohl drauflaufen end else Result := 0; end; Dann wird die irreführende Meldung 'Ungültiger Datentyp für ''%s''' erzeugt. |
Re: ReadBinaryData() - Problem
...sry, daß ich das rauskrame, aber vielleicht hilft es ja einem anderem
Deine Struktur "Info" ist falsch. Füge am Ende ein
Delphi-Quellcode:
ein.
Reserved: array[1..128] of Byte;
Danach so aus der Registry lesen.
Delphi-Quellcode:
Registry.ReadBinaryData('EDID', Info, SizeOf(Info));
...das liegt daran, daß es verschiedene EDID Strukturen gibt Version 1.0 bis 3.0 glaub ich. 1.0 war noch 128 Byte groß danach irgenwann 256 Byte, deshalb am Ende noch 128 Byte dazu, dann liegts du immer richtig. Gruß Tyrael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz