平台胜利。
我正在尝试获取一个名为SunJavaUpdateSched的键的值,但我得到了 一个错误。我得到了第二个错误,不知怎的,我可以打开钥匙,但无法获得价值。所以这是到目前为止的代码:
void dealWithRegistry()
{
HKEY regkey1;
char data[100];
DWORD datasize = sizeof (data) / sizeof (char);
LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_READ, ®key1);
if (rc != ERROR_SUCCESS)
{
cout << "there was a problem openning" << endl;
}
else
{
rc = RegGetValue (regkey1, NULL, L"SunJavaUpdateSched", RRF_RT_REG_SZ, NULL, (void*) data, &datasize);
if (rc != ERROR_SUCCESS)
{
cout << "there was a problem getting the value" << endl;
}
}
printf("%s\n", data);
}
答案 0 :(得分:2)
打印出实际的错误值。您可以查找系统错误代码,它将准确地告诉您问题所在。
请注意RegGetValue
将返回一个宽字符串,而不是字符串,这意味着使用char
的变量会给你带来垃圾。
与代码本身存在问题:
dealWithRegistry
......真的吗? ReadJavaUpdateSchedulerValue
怎么样?sizeof(char)
始终为1(根据定义)。static_cast
而不是C样式转换。RegCloseKey
!答案 1 :(得分:1)
ERROR_MORE_DATA表示您的数据缓冲区不大,无法接收该值。有关如何正确分配缓冲区的配方,请参阅example in the MSDN article on RegQueryValueEx。
您对L"..."
文字的使用表明您的项目已编译为Unicode,这意味着char data[]
必须为WCHAR data[]
(或TCHAR data[]
)。< / p>
表达式sizeof (data) / sizeof (char)
应写为sizeof (data) / sizeof (data[0])
;这样,无论声明data
的实际类型如何,它都将保持正确。此外,MSVC标准库完全具有(非标准)宏_countof
。