2012-06-02 160 views
2

我試圖用這個代碼來訪問Windows註冊表:在C訪問Windows註冊表++與CRegKey

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++運行時庫的錯誤:

調試Assertation失敗!

計劃:...

文件:C:\ Program Files文件\微軟的Visual Studio 11.0 \ VC \ ATLMFC \ INCLUDE \ altbase.h線:6146

表達:m_hkey = 0

有關信息等等等等

按忽略它崩潰之後。

我不知道是什麼編譯器使用,因爲我(想我已經)配置Qt Creator中使用Visual C++,但所謂的輸出目錄OS ..._._ MinGW_Qt_SDK_DEBUG

現在怎麼辦?

+0

這意味着註冊表打開調用已失敗。請檢查返回值或通話並從msdn中退出,在哪種情況下會發生此錯誤 – PermanentGuest

回答

3

我附近沒有Windows機器,但我認爲沒有子項HARDWAREHKEY_CURRENT_USER:它是HKEY_LOCAL_MACHINE

也就是說,添加到你不檢查Open呼籲錯誤提示,你真正想要做的是這樣的事實:

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

無論如何,它始終是處理錯誤是一個好主意,以防萬一。