什么是32& 64位c ++代码?

时间:2014-06-10 10:24:08

标签: c++ windows registry 32bit-64bit

我正在尝试从注册表项中获取值,并且最终的程序必须同时适用于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 return ERROR_FILE_NOT_FOUND on keys that exist,如果它是'64位操作系统上的'32位代码'它将无效,但我不明白是什么这意味着。

是否必须为不同的体系结构编译程序,还是特定于32位的RegGetValue?

很抱歉,我的大部分C ++编程都是在64位计算机成为主流之前完成的,而且我写过的偶然项目都没有出现过这个问题。

1 个答案:

答案 0 :(得分:2)

在64位Windows上有两个注册表视图,32位视图和64位视图。这在MSDN上标题为Accessing an Alternate Registry View

的主题中有所描述

默认情况下,32位进程将从32位视图读取,64位进程将从64位视图读取。如果您希望从特定视图中读取,则无论过程的体系结构如何,您都需要提供以下标志之一:KEY_WOW64_64KEYKEY_WOW64_32KEY

因此,如果您需要的数据位于32位视图中,请传递KEY_WOW64_32KEY。如果数据在64位视图中传递KEY_WOW64_64KEY。如果数据可以在任一键中,请检查两次,一次通过KEY_WOW64_32KEY并再次通过KEY_WOW64_64KEY