AGB  ·  Datenschutz  ·  Impressum  







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

Registry: Typ ermitteln

Ein Thema von Pseudemys Nelsoni · begonnen am 19. Mai 2004 · letzter Beitrag vom 19. Mai 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#11

Re: Registry: Typ ermitteln

  Alt 19. Mai 2004, 17:21
wäre dieser code hier denn in ordnung?

Delphi-Quellcode:
function ReadRegFromAPI(const Key: HKEY; Path, lpValueName: string): string;
var
  KeyH : HKEY;
  lpType,
  lpcbData,
  lpData : DWORD;
  bRes : boolean;
begin
  Result := '';
  if RegOpenKeyEx(Key, PAnsiChar(Path), 0, KEY_READ, KeyH) = ERROR_SUCCESS then
  try
    lpType := REG_NONE;
    lpcbData := 0;
    bRes := false;
    if RegQueryValueEx(KeyH, PAnsiChar(lpValueName), nil, @lpType, nil, @lpcbData) = ERROR_SUCCESS then
    case lpType of
      REG_SZ, REG_EXPAND_SZ:
        begin
          SetLength(Result, lpcbData + 1);
          bRes := RegQueryValueEx(KeyH, PAnsiChar(lpValueName), nil, @lpType, @Result[1], @lpcbData) = ERROR_SUCCESS;
        end;
      REG_DWORD:
        begin
          bRes := RegQueryValueEx(KeyH, PAnsiChar(lpValueName), nil, @lpType, @lpData, @lpcbData) = ERROR_SUCCESS;
          Result := string(lpData);
        end;
    end;
  finally
    if not bRes then
      MessageBox(0, 'Fehler aufgetreten', '!', 0);
    RegCloseKey(Key);
  end;
end;

und wieso muss ich bei einem string auf das erste byte zeigen? also [1] ? bei einem integer sind es doch auch 4 bytes, wieso muss ich da nicht [1] angeben?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Registry: Typ ermitteln

  Alt 19. Mai 2004, 17:30
Die Funktion erwartet einen Zeiger auf ein Zeichen. String[1] ist dein erstes Zeichen, und mit @String[1] lieferst du einen Zeiger auf das erste Zeichen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#13

Re: Registry: Typ ermitteln

  Alt 19. Mai 2004, 17:40
Mitnichten erwartet die Funktion einen Zeiger auf ein Zeichen. Tatsächlich erwartet sie einen Zeiger auf einen Puffer, der die gewünschten Daten aufnehmen soll. Im Fall eines REG_SZ/REG_EXPAND_SZ ist das entweder ein pchar, ein "array of char" oder eben ein String.
Und da hängt es dann eben vom Typ ab. Da ein String im 0. Zeichen die Länge hat, muss man eben die [1] separat angeben.

Es kann aber auch ein DWORD sein, dann wäre es eben ein Zeiger auf die DWORD-Variable, so wie das Pseudemys Nelson auch gemacht hat. Nur wäre
Result := inttostr(lpData); wohl sinnvoller als
Zitat:
Result := string(lpData);
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#14

Re: Registry: Typ ermitteln

  Alt 19. Mai 2004, 17:51
hallo chewie/mathias, danke für die erklärung

2 Fragen stellen sich aber wieder mal

also zur ersten...

ich glaube das "SetLength(Result, lpcbData + 1);" von mir falsch war, denn selbst mit "SetLength(Result, lpcbData - 2);" bekomme ich noch das richtige Ergebnis! oder täusch ich mich da? habs jedenfalls getestet und die showmessage zeigte den gesamten string an.

zur zweiten...

mathias, ich arbeite ohne die vcl, da ich eine dll schreibe, sollte nicht all zu gross werden :\
hast du da noch ne andere idee?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:45 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