![]() |
[Delphi 2010] RegQueryValueEx-Problem
Hallo zusammen,
so langsam hasse ich diesen Kram mit Unicode. Ich stehe vor folgendem Problem :
Delphi-Quellcode:
Dieser Sourcecode hat unter Delphi 2006 noch wunderbar funktioniert. Nur leider schmeißt mir RegQueryValueEx in der ersten IF-Abfrage unter Delphi 2010 den Fehlercode 2 (File not found) zurück. Warum passiert das ? Ich kann mir da leider keinen Reim drauf machen ausser das es mal wieder mit Unicode zu tun hat. Vermute ich das richtig ? Wenn ja, was muss ich ändern, damit es funktioniert ?
var
FAccess : Cardinal; Key : HKEY; dwType : DWORD; dwLen : DWORD; {...} if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar('SOFTWARE\Microsoft\Windows NT\CurrentVersion'), 0, FAccess, Key) = 0 then begin try dwType := REG_NONE; // Typ muss ermittelt werden dwLen := 0; // Puffergröße auf Null if RegQueryValueEx(key, 'DigitalProductId', nil, @dwType, nil, @dwLen) = ERROR_SUCCESS then if (dwType = REG_BINARY) and (dwLen > 0) then begin SetLength(HexBuf,dwLen); RegQueryValueEx(key, 'DigitalProductId', nil, @dwType, @HexBuf[0], @dwLen); end; Result.ProduktKey := DecodeProductKey(HexBuf); finally RegCloseKey(key); end; end; |
AW: [Delphi 2010] RegQueryValueEx-Problem
Das kann ich nicht reproduzieren, bei mir funktioniert der Code (mit KEY_READ als Zugriff) problemlos (Delphi 2010, Win 32-Bit).
// EDIT: Vielleicht funkt da die Umleitung der Registryzweige dazwischen, wenn du ein 64-Bit Betriebssystem hast. |
AW: [Delphi 2010] RegQueryValueEx-Problem
Guten Morgen Sebastian,
danke erstmal für Deine Antwort. Ja, ich habe es gestern Abend unter einem 64Bit Betriebssystem ausprobiert. Jetzt habe ich es nochmal unter Windows XP 32 Bit ausprobiert und es funktioniert. Dann liegt es wohl doch an der 64Bit-Erkennung. |
AW: [Delphi 2010] RegQueryValueEx-Problem
Ich vermute eher kein Unicode Problem, sondern ein Rechte-problem. HKLM darf halt nicht jeder:-(
mschmidt |
AW: [Delphi 2010] RegQueryValueEx-Problem
Nee, es ist kein Rechte-Problem. Ich habe es rausgefunden. Es war doch ein Unicode-Problem. Ich hatte ein Record falsch deklariert. Statt Ansi hatte ich Unicode genommen. Nachdem ich es geändert hatte, funktionierte es wieder so wie vorher. Dadurch, das ich das Record als Unicode erstellt hatte, wurde die Variable FAccess nicht richtig gesetzt. Dadurch kam es zu dem Problem unter einem 64Bit Betriebssystem.
Danke nochmal an alle beteiligten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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