2010-06-14 6 views
1

Je suis en train de m'ennuyer lundi, alors mes excuses pour avoir posté une question comme celle d'un débutant.Convertir void * représentation d'un dword en wstring

J'utilise CRegKey.QueryValue pour renvoyer une valeur dword du registre. QueryValue écrit la valeur dans void* pData et la longueur dans ULONG* pnBytes.

Maintenant, il existe un moyen de l'obtenir de pData dans un wstring probablement via un flux de chaînes. Le plus proche que je suis venu obtenait le résultat en tant que chaîne hexagonale. J'étais sur le point de travailler sur la conversion de la représentation hexadécimale en dword puis de là à un wstring quand j'ai décidé que c'était juste bête et demandez ici plutôt que de gaspiller une heure de ma vie sur le problème.

Répondre

2

Pourquoi n'utilisez-vous pas CRegKey :: QueryDWORDValue à la place? Ensuite, vous pourriez juste swprintf_s pour l'imprimer en une chaîne (si vous le souhaitez).

+0

Comment puis-je savoir qu'il était un DWORD à l'avance? –

+0

Si vous connaissez le nom de la clé, vous devez probablement connaître le type de données. – Alan

+1

Si vous ne connaissez pas, alors vous devrez utiliser CRegKey :: QueryValue, vérifier si le type de valeur est REG_DWORD, et ensuite vous pouvez simplement convertir le membre pData en DWORD, par exemple. DWORD x = * reinterpret_cast (pData); – humbagumba

1

Je n'ai pas testé, mais devrait être bien:

/* To test if the value is REG_DWORD and get it */ 
DWORD dwValue; 
switch (key->QueryDWORDValue(lpName, &dwValue)) { 
    case ERROR_SUCCESS: 
     cout << "All ok, value: " << dwValue; 
     break; 

    case ERROR_INVALID_DATA: 
     cout << "Error, not DWORD value"; 
     break; 

    default: 
     cout << "Some other error"; 
     break; 
} 

/* to obtain the type */ 
DWORD dwType; 
if (key->QueryValue(lpName, &dwType, NULL, NULL) == ERROR_SUCCESS)) /* use 'dwType' here... */ 
Questions connexes