c ++ - bruger RegQueryValueEx til at tage reg\_sz som input og bruge det som char array

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på at udtrække registreringsværdien af ​​typen REG\_SZ og bruge den som et tegnfelt, jeg har forsøgt at tage input i byte * buffer, men det er heller ikke muligt at få det i char array.


BYTE* buffer = new BYTE[cbMaxValueData];
ZeroMemory(buffer, cbMaxValueData);
buffer[0] = '';

LONG dwRes = RegQueryValueEx(hKey, oem\_name, 0, NULL, buffer, &lpData);

\_tprintf(TEXT("(\%d)  \%s: \%s
"), i+1, oem\_name, buffer);


hvad jeg vil, er at udtrække hver karakter af buffer, men jeg finder ingen måde:
PS: Værdien i min registreringsdatabase er af REG\_SZ type


dybest set hvis nogen kunne hjælpe mig med at konvertere BYTE * buffer til char * var eller string str så også, det vil løse mit problem

Bedste reference


Koden du har indsendt er ufuldstændig og kompilerer ikke, og du kontrollerer ikke returværdien fra RegQueryValueEx!


Forskellen mellem BYTE* og char* er ikke problemet, og du kan bare kaste til char *, fordi de begge er bare lige store størrelser, og du er ligeglad med tegnet.


Du tildeler normalt ikke et BYTE-array, når du læser fra registreringsdatabasen, du tildeler den type, du læser og bare cast, når du ringer til funktionen:


TCHAR buffer[100];
DWORD size = sizeof(buffer);
LONG result = RegQueryValueEx(hKey, oem\_name, 0, NULL, (BYTE*) buffer, &size);
if (ERROR\_SUCCESS == result) \_tprintf(....); else printf("Error \%u
", result);


men kode som dette med en fast størrelse buffer er ofte ikke nok. Hvis du læser ukendte data, skal du ringe til RegQueryValueEx i en loop. Først med en NULL buffer for at få størrelsen, så tildele og ring igen. Du har brug for en loop, fordi en anden kan øge størrelsen af ​​dataene mellem de to opkald til RegQueryValueEx!


Selvom du gør alt, hvad du stadig har problemer med at håndtere, fordi den streng du læser muligvis ikke afsluttes. Du skal manuelt afslutte eller bruge RegGetValue i stedet. [6]