[英]Get value from registry C++ crashes
怎么了? 当我想获得AUVersion的价值时,它崩溃了。 此项存在于注册表中,但我无法获取。
int main(int argc, char *argv[])
{
HKEY key;
if (RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\JavaSoft\\Auto Update\\"), &key) != ERROR_SUCCESS)
{
cout << "Unable to open registry key\n\n";
}
char path[1024];
DWORD value_length = 1024;
//here is the crash
RegQueryValueEx(key, "AUVersion", NULL, (LPDWORD)REG_SZ, (LPBYTE)&path, &value_length);
cout << "the value read from the registry is: " << path << endl;
system("pause");
return 0;
}
第四个参数是LPDWORD
指向DWORD的指针。 您使用了一个常规整数并将其强制转换为指针(当取消引用时)将崩溃。
该参数接收注册表值的类型。 如果您不想知道类型,请将其设置为NULL。
调用RegQueryValueEx()
有两个错误:
类型参数被写入,因此必须是有效地址,并且不是:
(LPDWORD)REG_SZ
这可能是导致崩溃的原因。
&path
应该是path
改成:
DWORD type;
RegQueryValueEx(key, "AUVersion", NULL, &type, (LPBYTE) path, &value_length);
您必须检查RegQueryValueEx()
的结果以确保已填充path
并且后续代码未处理统一变量:
const DWORD result = RegQueryValueEx(key,
"AUVersion",
NULL,
&type,
(LPBYTE) path,
&value_length);
// Check status of the query and ensure it was a string
// that was read.
if (ERROR_SUCCESS == result && REG_SZ == type)
{
// Success.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.