c ++注册表没有获得第二个值

时间:2012-09-08 14:46:01

标签: c++ windows visual-c++

为什么这不起作用?第一个RegGetValue将正确的值放入值变量,第二个不放置,但是如果我注释第一个RegGetValue,那么第二个将工作并将正确的内容放入value2变量。我尝试使用第一个RegGetValue函数调用后使用RegOpenKeyEx重新打开注册表项,但没有成功。 我做错了什么

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);

}

1 个答案:

答案 0 :(得分:4)

关于你上一个参数的RegGetValue manual;

  

pcbData [in,out,optional]

     

指向指定变量的指针   pvData参数指向的缓冲区大小,以字节为单位。   函数返回时,此变量包含数据的大小   复制到pvData。

换句话说,第一次调用将BufferSize变量的内容更改为返回的第一个值的大小,并且需要在第二次调用之前重置。