AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadBinaryData() - Problem

Ein Thema von peicher · begonnen am 8. Feb 2005 · letzter Beitrag vom 2. Feb 2006
Antwort Antwort
peicher

Registriert seit: 7. Feb 2005
5 Beiträge
 
#1

ReadBinaryData() - Problem

  Alt 8. Feb 2005, 09:29
Morgen zusammen,

Ich will Daten aus der Registry mit Hilfe der Methode ReadBinaryData() auslesen.

Folgendermaßen rufe ich diese auf:
Registry.ReadBinaryData('EDID', Info, 128); '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.

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
Gruß,
Philipp
  Mit Zitat antworten Zitat
peicher

Registriert seit: 7. Feb 2005
5 Beiträge
 
#2

Re: ReadBinaryData() - Problem

  Alt 8. Feb 2005, 12:35
Hat denn niemand ne Idee?
Gruß,
Philipp
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: ReadBinaryData() - Problem

  Alt 8. Feb 2005, 13:23
Zitat von peicher:
Morgen zusammen,

Ich will Daten aus der Registry mit Hilfe der Methode ReadBinaryData() auslesen.

Folgendermaßen rufe ich diese auf:
Registry.ReadBinaryData('EDID', Info, 128); '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.

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?
Nach deiner Fehlermeldung muss ich bezweifeln, das der Key 'EDID' wirklich vom Typ "REG_BINARY" ist.
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);
Andreas
  Mit Zitat antworten Zitat
peicher

Registriert seit: 7. Feb 2005
5 Beiträge
 
#4

Re: ReadBinaryData() - Problem

  Alt 8. Feb 2005, 13:31
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?
Gruß,
Philipp
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: ReadBinaryData() - Problem

  Alt 9. Feb 2005, 09:10
Zitat von peicher:
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?
Seltsam, dass dein TRegistry Objekt den Namen "Registry" trägt; dies müsste eigenlich zu einem
Namenskonflikt mit der Unit registry.pas führen.

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:
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;
Also ich vermute jetzt: die Daten in dem Registry-Key sind länger als 128 Bytes.
Dann wird die irreführende Meldung 'Ungültiger Datentyp für ''%s''' erzeugt.
Andreas
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: ReadBinaryData() - Problem

  Alt 2. Feb 2006, 14:34
...sry, daß ich das rauskrame, aber vielleicht hilft es ja einem anderem

Deine Struktur "Info" ist falsch.
Füge am Ende ein
  Reserved: array[1..128] of Byte; ein.

Danach so aus der Registry lesen.

  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
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 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