2

我尝试使用以下代码访问 Windows 注册表:

CRegKey key;
LPTSTR szBuffer = new TCHAR[50];
ULONG cchBuffer = 257;
key.Open(HKEY_CURRENT_USER, L"HARDWARE", KEY_READ);
ULONG chars;
CString str;

if (key.QueryStringValue(L"Test", 0, &chars) == ERROR_SUCCESS)
{
    key.QueryStringValue(L"Test", str.GetBuffer(chars), &chars);
    str.ReleaseBuffer();
}
key.Close();

它返回 Microsoft Visual C++ 运行时库的错误:

调试断言失败!

程序: ...

文件:C:\Program Files\Microsoft Visual Studio 11.0\VC\ATLMFC\INCLUDE\altbase.h 行:6146

表达式:m_hkey != 0

求信息啊啊啊

按忽略后它崩溃。

我不确定使用的是什么编译器,因为我(认为我已经)将 Qt Creator 配置为使用 Visual C++,但输出目录操作系统称为 ..._._MinGW_Qt_SDK_DEBUG

现在做什么?

4

1 回答 1

3

我附近没有 Windows 机器,但我认为没有名为HARDWAREinto的子项HKEY_CURRENT_USER:它是 into HKEY_LOCAL_MACHINE

再加上您没有检查Open错误调用这一事实表明您真正想要做的是:

key.Open(HKEY_LOCAL_MACHINE, L"HARDWARE", KEY_READ);

无论如何,处理错误总是一个好主意,以防万一。

于 2012-06-02T21:54:05.703 回答