C ++ RegQueryValueEx () получить DWORD, но не работает - PullRequest
1 голос
/ 23 февраля 2012

Я хочу получить значение реестра, и получение REG_SZ работает, но не DWORD, думаю, может быть, я не знаю, как преобразовать DWORD в многобайтовую форму. Мой код ниже, кто-то может подсказать, что не так с моим кодом, спасибо:

void GetRegistryValue(char* getValue, int maxSize)
{
    LPCTSTR keypath = TEXT("Software\\....");
    HKEY hKey;
    DWORD dwType=0, dwSize=maxSize;     
    LONG lResult; 

    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, keypath, 0, KEY_ALL_ACCESS, &hKey);

    if(lResult == ERROR_SUCCESS)
    {
        LPCTSTR server = TEXT("Server");
        TCHAR *wideValue = (TCHAR *) malloc(dwSize * sizeof(TCHAR));
        memset((void*)wideValue, 0x00, dwSize * sizeof(TCHAR));
        lResult = RegQueryValueEx(hKey, server, 0, &dwType, (LPBYTE)wideValue, &dwSize); 

        if (lResult == ERROR_SUCCESS)
        {
            if(dwType == REG_SZ)
            {
                wcstombs(getValue, wideValue, dwSize);  
            }
            else if(dwType == REG_DWORD)
            {                                       
                DWORD dwValue;
                lResult = RegQueryValueEx(hKey, server, 0, &dwType, (PBYTE)dwValue, &dwSize);
                if (lResult == ERROR_SUCCESS)
                {
                    TCHAR *lpszResult = (TCHAR *) malloc(dwSize * sizeof(TCHAR));
                    memset((void*)lpszResult, 0x00, dwSize * sizeof(TCHAR));
                    wsprintf(lpszResult, TEXT("%d"), dwValue);
                    wcstombs(getValue, lpszResult, dwSize);
                    free((void*) lpszResult);
                }
            }
            else
            {
                TCHAR *lpszResult = (TCHAR *) malloc(dwSize * sizeof(TCHAR));
                memset((void*)lpszResult, 0x00, dwSize * sizeof(TCHAR));
                wsprintf(lpszResult, TEXT("%s"), TEXT("error"));
                wcstombs(getValue, lpszResult, dwSize);
                free((void*) lpszResult);
            }
        }

        free((void*) wideValue);
    }
}



int _tmain(int argc, _TCHAR* argv[])
{
    char data[255];
    GetRegistryValue(data, 255);



    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...