【问题标题】:Returning invalid data from RegQueryValueEx() DWORD从 RegQueryValueEx() DWORD 返回无效数据
【发布时间】:2013-11-22 16:53:55
【问题描述】:

我正在尝试从注册表中读取 DWORD 值。在注册表中,它存储为 0x00000068 (104)。当我从注册表中读取值时,我得到一个非常大的数字(3435973836)。任何帮助表示赞赏!

DWORD getRecentId(PDWORD id) {
    HKEY hKey;

    LONG lRes = RegOpenKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\My App\\Feed Reader"), 0, KEY_QUERY_VALUE, &hKey);

    if (!lRes == ERROR_SUCCESS)
    {
        RegCloseKey(hKey);

        return ERROR_FILE_NOT_FOUND;
    }

    DWORD dwSize = sizeof(DWORD);

    lRes = RegQueryValueEx(hKey, _T("Latest"), NULL, NULL, (LPBYTE)&id, &dwSize);

    if (!lRes == ERROR_SUCCESS)
    {
        RegCloseKey(hKey);

        return ERROR_NOT_ENOUGH_MEMORY;
    }

    RegCloseKey(hKey);

    return lRes;
}

【问题讨论】:

  • 不要取id的地址,已经是指针了。使用 (LPBYTE)id。

标签: c++ winapi


【解决方案1】:

3435973836 是一个神奇的数字。将其转换为十六进制得到 0xcccccccc。当您在 Visual Studio 调试器中看到它时,您知道您正在使用未初始化的变量。

是,使用&id 是错误的。这会改变指针,而不是指向的值。请改用id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多