C++ C++;RegQueryValueEx()获取DWORD但不工作

C++ C++;RegQueryValueEx()获取DWORD但不工作,c++,winapi,registry,C++,Winapi,Registry,我想得到一个注册表值,得到REG_SZ是可行的,但不是DWORD,我想我可能不知道如何将DWORD转换成多字节形式。我的代码如下,有人能建议我的代码有什么问题吗,谢谢: void GetRegistryValue(char* getValue, int maxSize) { LPCTSTR keypath = TEXT("Software\\...."); HKEY hKey; DWORD dwType=0, dwSize=maxSize; LONG l

我想得到一个注册表值,得到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;
}

您可能希望使用
&dwValue
传递指向
regqueryvaluex
的指针,谢谢我会尝试您的建议。@RetiredInja为什么不将其放在一个可以接受的答案中?另外,您正在将DWORD转换为宽字符串,然后将其转换为MBCS字符串。只需使用
sprintf
(或
itoa
)将其直接转换为MBCS字符串即可。退休忍者已正确响应,因为我对作为指针的PBYTE理解不足。