0

为什么这不起作用?第一个 RegGetValue 将正确的值放入 value 变量中,第二个没有,但是如果我评论第一个 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);

}
4

1 回答 1

4

从关于你的最后一个参数的RegGetValue 手册;

pcbData [输入,输出,可选]

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

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

于 2012-09-08T14:53:10.627 回答