Я впился в это немного. RegGetValue() - это новый вызов реестра, который заботится о некоторой скрытой гадости традиционного способа запроса реестра (RegQueryValueEx). Здесь есть некоторая хорошая информация о различии: http://blogs.msdn.com/larryosterman/archive/2006/01/12/512115.aspx
Если вам нужна обратная совместимость, RegGetValue() не будет работать, поэтому вы должны использовать RegQueryValueEx для чтения данных из реестра.
А теперь к тому, что я думаю, что это реальный вопрос:
- Что вы получите обратно, когда вы используете RegQueryValueEx()?
- Как вы знаете, что значения, хранящиеся в реестре, находятся в кодировке utf-8? Сохраняется ли он как массив байтов в реестре или как REG_SZ?
- Вы посмотрели на значение с помощью regedit? Что ты видишь?
Так что, если вопрос заключается в том, как преобразовать закодированную строку UTF-8 в строку с завершающим символом ascii, то вам, вероятно, следует изменить заголовок вашего вопроса. Для справки, я нашел эту библиотеку, которая может быть полезно:
http://utfcpp.sourceforge.net
Когда я попытался ссылка несколько минут назад, сервер таймаута - возможно обслуживание SF происходит.
Но я бы предположил, что вы действительно уверены, что значения в реестре не сохраняются как записи REG_SZ.
Что заставляет вас думать, что RegGetValue работает в Windows XP? Вы сами это испытали? На каком пакете обновления? В документации MSDN указано, что требуется Vista или XP SP1. –
достаточно справедливо - я думал, что OP должен был написать RegQueryValue() - я обновил свой пост соответственно. –