我试图从registry项中获取一个值,最终的程序必须在32位和64位的机器上工作。
目前的代码是:
HKEY hKey; LONG Result1; LONG result2; Result1 = RegOpenKeyEx(HKEY_CLASSES_ROOT,L"Word.Application\\CurVer",0,KEY_READ,&hKey); cout << Result1; cout << "\n"; TCHAR value[255]; DWORD BufferSize = 255; result2 = RegGetValue(hKey, L"Word.Application\\CurVer", L"", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize); cout << result2;
我从RegGetValue得到了错误'2',并且看到这个RegOpenKeyEx / RegGetValue返回ERROR_FILE_NOT_FOUND,它存在于表示在64位操作系统上'32位代码'不起作用,但我不明白这是什么意思
它是必须为不同的体系结构编译的程序,还是RegGetValue特定于32位?
对不起,我的大部分C ++编程都是在64位计算机成为主stream之前完成的,而我之前编写的偶尔的项目都没有遇到这个问题。
在64位Windows上有两个注册表视图,即32位视图和64位视图。 这在MSDN中的标题为“ 访问备用注册表视图”中进行了描述 。
默认情况下,32位进程将从32位视图读取,64位进程将从64位视图读取。 如果您希望从特定视图读取,则无论进程的体系结构如何,都需要提供以下标志之一: KEY_WOW64_64KEY
或KEY_WOW64_32KEY
。
所以,如果你需要的数据是在32位视图中,传递KEY_WOW64_32KEY
。 如果数据在64位视图中传递KEY_WOW64_64KEY
。 如果数据可能在任一键中,则检查两次,一次传递KEY_WOW64_32KEY
并再次传递KEY_WOW64_64KEY
。