2017-02-11 2 views
-2

je travaille sur pour extraire la valeur de registre de type REG_SZ et l'utiliser comme un tableau de caractères j'ai essayé de prendre des entrées dans le tampon byte * mais en outre pas pu l'obtenir dans le tableau char.en utilisant RegQueryValueEx pour prendre reg_sz en entrée et l'utiliser comme tableau

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

LONG dwRes = RegQueryValueEx(hKey, oem_name, 0, NULL, buffer, &lpData); 

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

ce que je veux est d'extraire chaque caractère de tampon, mais je ne trouve aucune façon: PS: valeur dans ma clé de Registre est de type REG_SZ

essentiellement si quelqu'un pouvait me aider à convertir BYTE * tampon à char * var ou chaîne str puis aussi il va résoudre mon problème

+1

Bienvenue dans Stack Overflow. Veuillez prendre le temps de lire [The Tour] (http://stackoverflow.com/tour) et de consulter le contenu du [Centre d'aide] (http://stackoverflow.com/help/asking) quoi et comment vous pouvez demandez ici. –

+0

Indiquez-nous tous les détails de la valeur de registre particulière avec laquelle vous essayez de travailler et le code que vous avez essayé jusqu'à présent pour y accéder. Alors quelqu'un peut être en mesure de vous donner une meilleure aide sur ce que vous devez faire. – TheUndeadFish

Répondre

0

Le code que vous avez posté est incomplet et ne compile pas et vous ne vérifiez pas la valeur de retour de RegQueryValueEx! La différence entre BYTE* et char* n'est pas le problème et vous pourriez simplement convertir en char * parce qu'ils sont tous deux juste des tableaux de taille d'octets et vous ne vous souciez pas du signe.

Vous n'allouez généralement pas un tableau d'octets lors de la lecture du registre, vous allouez le type que vous lisez et juste jeté lors de l'appel de la fonction:

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\n", result); 

mais le code comme celui-ci avec un tampon de taille fixe est souvent insuffisant. Si vous lisez des données inconnues, vous devez appeler RegQueryValueEx dans une boucle. D'abord avec un tampon NULL pour obtenir la taille, puis allouer et rappeler. Vous avez besoin d'une boucle car quelqu'un d'autre peut augmenter la taille des données entre les deux appels à RegQueryValueEx!

Même si vous faites tout ce que vous avez encore des problèmes à traiter, car la chaîne que vous lisez peut ne pas être terminée \ 0. Vous devez terminer manuellement ou utiliser RegGetValue à la place.