............
RegEnumValue(hKey_FillValue,id,ValueName,&szValueName,NULL,&Type,(u_char*)pDataBin,&szData);
В (char*)pDataBin записывается текстовое значение "переменной" ключа. Если это путь/строка- всё прекрасно отображается, но если это какое-либо число, то соответственно на экране не распознающиеся символы.
............
Тут явно, что-то не так написано.
Давайте вместе подумаем.
И так для строк у нас в pDataBin строка в szData длинна строки, откуда знаем, да потому что на экране это выглядит, как строка в Type при этом лежит(REG_SZ) указание, что считали мы имено строку.
Для не строк например, DWORD, вы ожидаете, что там будет лежать текстовое представление числа, но оно какое-то кривое и отображается не так как нам хочется. Почему? Допустим, там не текстовое представление числа, а бинарное представление, тогда значится делаем так
RegEnumValue(hKey_FillValue,id,ValueName,&szValueName,NULL,&Type,(u_char*)pDataBin,&szData);
if (Type == REG_DWORD)
{
// можно еще размер на всякий случай померить
DWORD val = * reinterpret_cast<DWORD*>(pDataBin);
std::cout << "val =" << val << std::endl;
}
вроде как это должно работать.