2012-03-02 46 views
-1

我試圖讀取HKEY_CURRENT_USER \ Software \ Classes下在Windows 7的值作爲標準用戶,雖然鍵存在,我得到一個錯誤。下面兩位碼不成就:RegOpenKey/RegOpenKeyEx返回在Windows 7上2(文件未找到),而鍵存在

l = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, KEY_READ, &hKey); 

// RegOpenKeyEx doesn't success either 
l = RegOpenKey(HKEY_CURRENT_USER, L"Software\\Classes", &hKey); 

此代碼位於一個DLL 通過的應用做很多事情叫(我不知道所有的它)。

但是,一個簡單的應用程序,只需RegOpenKey同一臺計算機上同一帳戶作品完美...

誰能告訴我什麼可能導致的問題,兩者之間的差異? 測試應用程序是用C++編寫的,而dll是用c編寫的。

編輯:問題解決了,用L之前「Software \ Classes下」只刪除了「L」 ...

+0

是你的OS 32或64位? – 2012-03-02 13:09:09

+0

Windows 7 Pro 32位 – GianT971 2012-03-02 13:13:02

+1

和錯誤代碼是? – 2012-03-02 13:28:20

回答

0

我通過傳遞 「Software \ Classes下」,而不是L 「Software \ Classes下」 的功能解決了這個問題。

+1

這是沒有意義的。你不能傳遞'char *'或'wchar_t *'。它是一個或另一個。你使用正確的頭文件? – 2012-03-02 22:56:09

+0

嗯,我不是C/C++開發人員,我甚至不知道「L」是什麼意思。該代碼用C++編寫的程序被採取,和它的工作很好,但在C語言編寫的dll,我不得不刪除了「L」有它的工作...... – GianT971 2012-03-05 09:30:30

+0

我打電話給我的功能是這樣的(現在) :OverrideClassesRoot(HKEY_CURRENT_USER,「Software \\ Classes」);下面是它的protoype:OverrideClassesRoot(HKEY hKeyBase,LPCWSTR szOverrideKey)和我打電話RegOpenKey中的功能是這樣的:RegOpenKey(hKeyBase,szOverrideKey,&的hKey) – GianT971 2012-03-05 09:32:08

1

可能性較大,運行代碼爲不同的用戶或它的當前用戶不是在與進程的緩存註冊表項同步。請參閱RegOpenCurrentUser

+0

的方式我想你的解決方案,但它沒有工作,要麼 – GianT971 2012-03-02 15:01:49

相關問題