C++ C++;RegQueryValueEx()获取DWORD但不工作
我想得到一个注册表值,得到REG_SZ是可行的,但不是DWORD,我想我可能不知道如何将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
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理解不足。