0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 7
|
||||||
1 | ||||||
Чтение из реестра06.10.2013, 14:06. Показов 4613. Ответов 8
Метки нет (Все метки)
Добрый день, я пользуюсь VS 2010 С++. Я пытаюсь считать из реестра некоторые данные. Все бы хорошо но информация о версии BIOS имеет тип данных REG_MULTI_SZ, т.е. несколько строк. У меня в моём коде получается считать и вывести только первую строку, а остальные я не могу вывести. Вся информация выводится в окно EditBox. Собственно часть в которой у меня возникают проблемы это строки с 25 до 32. Там в буфер записывается только первая строка реестра, а остальные куда деваются не знаю. Вот моя процедура:
А должен выводить где написано версия BIOS: ACRSYS - 1 InsydeH2O Version 03.71.48V1.13 InsydeH2O Version 03.71.48V1.13 InsydeH2O Version 03.71.48V1.13
0
|
06.10.2013, 14:06 | |
Ответы с готовыми решениями:
8
Чтение ключа из реестра Чтение значений реестра Чтение ключей реестра, имеющих несколько значений Чтение реестра |
Ушел с форума
|
|
06.10.2013, 14:24 | 2 |
REG_MULTI_SZ - это набор строк, разделенных нулевым символом.
Вам нужно прочесть значение из реестра в буфер, а затем пройтись по нему и соединить все строки в одну.
0
|
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 7
|
|
06.10.2013, 15:08 [ТС] | 3 |
Добавлено через 5 минут
Убежденный, а можно как нибудь построчно извлекать из буфера с этими строками и записывать в основной буфер который потом будет выводиться на экран? Если можно то укажите код.
0
|
Ушел с форума
|
|
06.10.2013, 15:20 | 5 |
Читайте строку из начала буфера, пока не будет достигнут нулевой символ.
Достигли нуля - "перепрыгиваем" его и читаем следующую строку. И так, пока не пройдем весь буфер или пока не встретится двойной нуль. Каждую найденную строку можно складывать в std::wstring, например.
0
|
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 7
|
|
06.10.2013, 15:44 [ТС] | 6 |
Убежденный, фууух, я мало что понял, и как работать с std::wstring, как я понял это классы, я не умею... Можно примерный код хотя бы. А через функцию GetLine нельзя ни как?
0
|
Ушел с форума
|
|
06.10.2013, 16:08 | 7 |
Создайте указатель и установите его на начало буфера. Он будет указывать на
самую первую строку в буфере. Прочитайте эту строку куда-нибудь, а затем добавьте к ней символ перевода строки. Ну а дальше смещайте указатель в буфере вперед, на длину строки + 1 (чтобы учесть завершающий ноль). Получите указатель на следующую строку. И так далее до конца. Не знаю, что здесь может быть сложного. Если такие элементарные вещи вызывают затруднения, может рановато браться за BIOS и характеристики компьютера ?
0
|
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 7
|
|
06.10.2013, 16:14 [ТС] | 8 |
Убежденный, да это не сложно в принципе, просто на VS 2010 он почему то не добавляет к основному буферу буфер с этими данными, а только первую строку. Например в прошлых версиях все работало проще, все строки добавлялись и выводились. Я просто скопировал часть кода из методички и вставил, а он только первую выдает, а на прошлых курсах выдавало как положено... Они использовали более старые VS 6.
0
|
Ушел с форума
|
|
06.10.2013, 16:25 | 9 |
Не могло оно работать как положено.
Потому что REG_MULTI_SZ - это не строка, это набор строк, разделенных нулями. lstrcat скопирует только первую строку набора, до первого нуля.
0
|
06.10.2013, 16:25 | |
06.10.2013, 16:25 | |
Помогаю со студенческими работами здесь
9
Чтение из реестра C++ чтение реестра чтение с реестра Чтение из реестра Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |