c ++ - Indstilling af en DWORD-værdi i registreringsdatabasen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at indstille en DWORD-værdi i registreringsdatabasen. Jeg har fået det til at fungere med en tekstværdi, men nu vil jeg indstille en anden værdi med en numerisk (0). Men den skriver det ikke.

Dette er min kode:


RegOpenKeyEx(HKEY\_CURRENT\_USER, "Software\pager", 0, KEY\_ALL\_ACCESS, &hKey);
RegSetValueEx(hKey, TEXT("Save"), 0, REG\_SZ, (const BYTE*)0x00, sizeof(DWORD));
RegCloseKey(hKey);


PS: nøglen eksisterer allerede med værdien 1, så jeg forsøger at overlejre den med værdien 0 (jeg m ikke oprette en ny).

Bedste reference


Den største fejl er i (const BYTE*)0x00: du caster 0x00 til en BYTE *, hvilket betyder, at du grundlæggende sender en NULL pointer. I stedet skal du oprette en DWORD -variabel, sæt den værdi, du vil gemme i registreringsdatabasen i den, og send en peger til den i stedet for den 0x00.


Du skal også ændre REG\_SZ til REG\_DWORD, hvis du vil gemme en DWORD værdi, ellers vil DWORD blive fortolket som en (lidt underlig) streng.


RegOpenKeyEx(HKEY\_CURRENT\_USER, "Software\pager", 0, KEY\_ALL\_ACCESS, &hKey);
DWORD value=0;
RegSetValueEx(hKey, TEXT("Save"), 0, REG\_DWORD, (const BYTE*)&value, sizeof(value));
RegCloseKey(hKey);


Men vigtigst af alt, bør du virkelig kontrollere værdierne for disse funktioner: Nu er du bare 'håber' de arbejder, ignorerer eventuelle fejl og fortsætter med instruktionsflowet, hvilket kan føre til uventede situationer.


Hvis du har tjekket fejlkoderne, havde du straks bemærket, at det er funktionen RegSetValueEx, der fejler, og fejlkoden kan have været noget som 'ugyldig parameter', der ville have peget på dig i den rigtige retning.

Andre referencer 1


For parameteren dwType til RegSetValueEx skal du bruge REG\_DWORD i stedet for REG\_SZ.


Du skal også overføre en gyldig pointer til en DWORD for parameteren lpData.

Andre referencer 2


Skift din REG\_SZ parameter til REG\_DWORD. Denne parameter angiver typen af ​​den værdi, der vil blive skrevet til registreringsdatabasen.


Se http://msdn.microsoft.com/en-us/library/ms724884(v=vs.85).aspx for en komplet liste over typer. [18]