为什么这不起作用?第一个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);
}
答案 0 :(得分:4)
关于你上一个参数的RegGetValue manual;
pcbData [in,out,optional]
指向指定变量的指针 pvData参数指向的缓冲区大小,以字节为单位。 函数返回时,此变量包含数据的大小 复制到pvData。
换句话说,第一次调用将BufferSize
变量的内容更改为返回的第一个值的大小,并且需要在第二次调用之前重置。