0

なぜこれが機能しないのですか?最初の RegGetValue は値変数に正しい値を入れますが、2 番目はそうではありません。最初の 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変数の内容は、最初の呼び出しによって最初に返される値のサイズに変更され、2 回目の呼び出しの前にリセットする必要があります。

于 2012-09-08T14:53:10.627 に答える