使用CRegKey在C ++中访问Windows注册表

时间:2012-06-02 19:55:51

标签: c++ windows qt registry

我尝试使用此代码访问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 ++运行时库的错误:

  

Debug Assertation Failed!

     

计划:......

     

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

     

表达式:m_hkey!= 0

     

有关Blah blah的信息

按下忽略后,它会崩溃。

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

现在该怎么办?

1 个答案:

答案 0 :(得分:3)

我附近没有Windows机器,但我认为HARDWARE中没有名为HKEY_CURRENT_USER的子项:它位于HKEY_LOCAL_MACHINE

这一点,除了你没有检查Open错误调用这一事实表明你真正想要做的是:

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

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