2015-03-31 149 views
0

所以,代碼向我咆哮,需要一點幫助。 錯誤:char *與成本BYTE *不兼容。 這是吠叫:RegSetValueExA(hKey, "My App", 0, REG_SZ, buffer, sizeof(buffer));特別是緩衝區。C++添加到註冊表

錯誤消息(vstudio):Error 3 error C2664: 'RegSetValueExA' : cannot convert parameter 5 from 'char [500]' to 'const BYTE *' {snip}\visual studio 2010\projects\reg\reg\reg.cpp 74

我的代碼(注:stemres =完整路徑的可執行文件,在LPCWSTR,我成功地轉換成char):

HKEY hKey; 
RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey); 
// stemres = the executable path 
char buffer[500]; 
wcstombs(buffer,stemres,500); 
RegSetValueExA(hKey, "My App", 0, REG_SZ, buffer, sizeof(buffer)); 
RegCloseKey(hKey); 
cout << "Added to registry."; 
+0

在哪條線上「吠叫」?請複製並粘貼完整的編譯器輸出。 – 2015-03-31 18:41:26

+0

RegSetValueExA(hKey,「MyApp」,0,REG_SZ,buffer,sizeof(buffer)); 具體而言:緩衝區 – CBMC 2015-03-31 18:42:57

回答

1

RegSetValueExA()第五個參數是const BYTE *,它應該是const unsigned char *的同義詞,並且您嘗試將char *傳遞給它。恐怕你必須轉換它:

RegSetValueExA(hKey, "My App", 0, REG_SZ, reinterpret_cast<const BYTE *>(buffer), sizeof(buffer)); 
+0

好吧,那個固定錯誤,但它沒有添加到註冊表中。 – CBMC 2015-03-31 18:46:19

+0

不添加部分是我的愚蠢,我忘了它的Windows \ CurrentVersion不只是CurrentVersion。解決了,謝謝! – CBMC 2015-03-31 18:48:04

+1

@CBMC你應該檢查返回值 – Slava 2015-03-31 18:48:10