2012-09-08 28 views
0

爲什麼這不起作用?第一個RegGetValue將正確的值放在值變量中,第二個不會,但是如果我評論第一個RegGetValue,第二個將會工作並將正確的內容放入value2變量。在第一次RegGetValue函數調用之後,我嘗試使用RegOpenKeyEx重新打開註冊表項,但沒有成功。 什麼我做錯了C++註冊表沒有獲得第二個值

HKEY hKey = NULL; 
LSTATUS res; 

res=RegOpenKeyEx(HKEY_CLASSES_ROOT, "", 0, KEY_READ|KEY_WOW64_64KEY, &hKey); 
if(res!=ERROR_SUCCESS) 
     printf("insucces\n"); 
else { 
    char value[255], value2[255]; 
    memset(value,0,255); 
    memset(value2,0,255); 
DWORD BufferSize = BUFFER; 
RegGetValue(hKey,"\\.jpeg","",RRF_RT_ANY,NULL,(PVOID)&value, &BufferSize); 
strcat(value,"\\DefaultIcon"); 
RegGetValue(hKey,"jpegfile\\DefaultIcon","",RRF_RT_ANY,NULL,(PVOID)&value2, &BufferSize); 

printf("succes %s\n",value2); 

} 

回答

4

RegGetValue manual你的最後一個參數;

pcbData [IN,OUT,可選]

的指針,該指定的 緩衝區的大小由pvData參數指向,以字節爲單位的變量。 函數返回時,此變量包含複製到pvData的數據大小 。

換句話說,BufferSize變量的內容被第一次調用改變爲返回的第一個值的大小,並且需要在第二次調用之前重置。

+0

謝謝。那是對的! – AlexandruC