我的应用程序正确读取和写入注册表。现在,我需要从以下位置读取注册表值:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid
这是我的代码:
bool GetWindowsID(string &winID)
{
HKEY hKey = 0, hKeyType = HKEY_LOCAL_MACHINE;
bool status = false;
DWORD dwType = 0;
DWORD dwBufSize = 256;
char value[256] = "\0";
if (RegOpenKeyEx(hKeyType, L"SOFTWARE\\Microsoft\\Cryptography", NULL, KEY_QUERY_VALUE|KEY_WOW64_64KEY, &hKey) == ERROR_SUCCESS)
{
dwType = REG_SZ;
if (RegQueryValueEx(hKey, L"MachineGuid", NULL, &dwType, (LPBYTE)value, &dwBufSize) == ERROR_SUCCESS)
status = true;
RegCloseKey(hKey);
}
winID.assign(value);
return status;
}
我得到guid
但是在每个字符之后的value
数组中它们是一个“\ 0”值,因为只有第一个数组字符被赋值给字符串。这很奇怪!
答案 0 :(得分:4)
您已构建定位Unicode,因此注册表API将返回UTF-16 Unicode文本。而不是<?php
$urls = array (
"id=1.php",
"id=2.php",
"id=3.php" );
$random = (rand()%3);
header ("Location: ".$urls[$random]);
exit;
?>
使用char
并记住每个wchar_t
元素的宽度为2个字节。
还要确保考虑到返回的字符串不是以空值终止的,如文档中所述。您必须考虑wchar_t
中返回的值。
答案 1 :(得分:4)
我得到guid但是在每个字符之后的值数组中它们是“\ 0” 由于只有数组的第一个字符被赋值的值 串。这很奇怪!
这是因为您正在调用Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
的Unicode版本,因此字符串以Unicode(UTF-16)返回。
您必须使用宽字符参数来获取值。
更改此行:
RegQueryValueEx()
改为使用char value[256] = "\0";
。