Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 125

Считывание бинарных значений из реестра и запись их в одну строку

10.07.2009, 13:20. Показов 2779. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//9.Функция для считывание бинарных значений из реестра и передачи значения в виде одной строки через пробел (передать переменные с путем и параметром реестра)
AnsiString reg_reading_bin(AnsiString root, AnsiString dur, AnsiString name)
{ TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
reg->RootKey = GetPViodFromStrKey(root);
reg->OpenKey(dur.c_str(), true);
if (reg->ValueExists(name))
{
AnsiString znachenie;
char buff[64];
char array[4];
reg->ReadBinaryData(name, &array,sizeof(BYTE));
sprintf (buff, "0x%02x 0x%02x 0x%02x 0x%02x", (unsigned char)array[0], (unsigned char)array[1], (unsigned char)array[2], (unsigned char)array[3]);
znachenie = printf("buff = %s\n", buff);
return (znachenie);}
 }
Вот функция при запуске вылетает ошибка
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class ERegistryException with message 'Invalid data type for 'CacheSize''. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

что зделал не правильно

Вызываю вот так


C++
1
2
3
4
5
6
AnsiString a25 = "HKEY_LOCAL_MACHINE";
AnsiString b25 = "SYSTEM\\CurrentControlSet\\Control\\FileSystem\\CDFS";
AnsiString c25 = "CacheSize";
AnsiString t25;
t25 = reg_reading_bin (a25,b25,c25);
ShowMessage (t25);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2009, 13:20
Ответы с готовыми решениями:

Считывание и запись по пути с реестра
Всем привет,столкнулся с такой проблемкой,принцып таков: происходит запуск приложения с аргументами,в аргументах я добавил конфиг с...

Правка реестра в наладоннике (Запись, считывание ключей)
нужно править реестр под наладонник, обычные методы не подходят, посоветуйте что-нибудь. Заранее спасибо

Чтение и запись бинарных значений
Всем привет пытаюсь своими руками научиться создавать Архиватор, но многого еще не понимаю, я написал такой код $i =...

12
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2009, 13:40
Когда пишешь код - потрать 5 минут и аккуратно его отформатируй. Ну невозможно в такой помойке ковыряться.

Что в твоём понимании делает код "znachenie = printf("buff = %s\n", buff);"?
И что в твоём понимании делает printf? Просто прежде чем лезть писатьпрограмму ты не считаешь нужным хотя бы разобраться в том, а что же ты делаешь?
1
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 125
10.07.2009, 14:04  [ТС]
printf сщитает кол-во строк ну все же где сама строка откуда ее взять
да я знаю что программист из меня не какой но я все таки пытаюся я же не виноват что меня так обучали в свое время, приходится задовать глупые вопросы и делать кучу ошибок а как я иначе получу нужный мне результат я программированием занимаюсь только ради интереса а не ради выгоды и тому подобное!!!
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
10.07.2009, 14:07
Цитата Сообщение от omezik Посмотреть сообщение
printf сщитает кол-во строк ну все же где сама строка откуда ее взять
Вобще-то, она возвращает количество записанных символов в поток.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2009, 14:07
printf ПЕЧАТАЕТ строку (в консольном приложении) и уэ точно количество строк не считает (а возвращает количество напечатанных БУКВ). Ты хоть объясни, что твоя функция должна делать. Если вернуть отформатированную строку, то вместо 13 и 14 строк надо писать "return buff;". При этом у тебя есть вторая ветка исполнения, в которую мы попадаем, если условие в if'е на 6-й строке ложно. В этом случае процедура вообще возвращает мусор, при дальнейшем использовании которого почти наверняка программа раком встанет
1
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 125
10.07.2009, 14:14  [ТС]
C++
1
2
3
4
5
6
7
char buff[4];
char array[4];
reg->ReadBinaryData(name, &array,sizeof(array));
sprintf (buff, "0x%02x 0x%02x 0x%02x 0x%02x", (unsigned char)array[0],
 (unsigned char)array[1], (unsigned char)array[2], (unsigned char)array[3]);
printf("buff = %s\n", buff);
return (buff);
А так тоже ругается на 4 строку
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2009, 14:17
Покажи всю процедуру целиком и текст ругани. И убери ты строку с printf'ом, я её тебе написал чисто для того, чтобы ты мог посмотреть, что там напечатается. Я не знал, что ты настолько не разбираешься

Добавлено через 33 секунды
и почему в buff только 4 байта?
0
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 125
10.07.2009, 14:18  [ТС]
С 6 строкой продумано все я просто не пишу ни чего сдесь как и ты говорил лишнее убираю ЧТО БЫ ГЛАЗА НЕ МОЗОЛИТЬ
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2009, 14:20
Ну тогда покажи, как ругается. Почему всё из тебя клещами надо вытаскивать?
0
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 125
10.07.2009, 14:25  [ТС]
спасибо все получилось я помню что printf выводит сообщение по паскалю и php , просто подумал может в плюсах он другую функцию выполняет !!!

Добавлено через 3 минуты 19 секунд
А допустим массив будет состоять не из 4 а из 100 строк что тогда опять ошибка на ошибке

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
AnsiString reg_reading_bin(AnsiString root, AnsiString dur, AnsiString name)
{ TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
// выбираем нужный корень
reg->RootKey = GetPViodFromStrKey(root);
// открываем секцию
reg->OpenKey(dur.c_str(), true);
// Если ветка существует, то
if (reg->ValueExists(name))
{
//BYTE binarydat[4];
//reg->ReadBinaryData(name, &binarydat,sizeof(BYTE));
//BYTE array[4];
char buff[64];
char array[4];
reg->ReadBinaryData(name, &array,sizeof(array));
sprintf (buff, "0x%02x 0x%02x 0x%02x 0x%02x", (unsigned char)array[0], (unsigned char)array[1], (unsigned char)array[2], (unsigned char)array[3]);
// закрываем секцию
//reg->CloseKey();
//Возвращаем значение функций
return (buff);}
else {
AnsiString znachenie = "0";
return (znachenie);
 }
 }
Вот что получилось
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2009, 14:33
А я тебе сразу писал, что код, который я тебе сделал - он "тупой" ибо заточен на кокнкретную реализацию из 4 чисел, разделённых одним пробелом
0
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 125
10.07.2009, 15:04  [ТС]
C++
1
char array[4];
хотел за место этой строчки всавить следующую
C++
1
char* array=new BYTE[4];
выдает ошибку при запуске программы
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00402AFB in module 'Project1.exe'. Read of address 00000202'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Добавлено через 13 минут 8 секунд
В данный момент хотя бы сделать так что бы в функцию можно было передать переменую например значение ее 4 и вставить в массив

C++
1
2
int i = 4;
char array[i];
раньше в других функциях я делал вот так все работало
C++
1
2
int i = 4;
char* array=new BYTE[i];
а в этой функций почему то не хочет

Добавлено через 8 минут 19 секунд
Моя задумка такова делаем небольшое редактирование кода
C++
1
2
3
4
sprintf (buff, "0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
 (unsigned char)array[0], (unsigned char)array[1],(unsigned char)array[2], (unsigned char)array[3],
unsigned char)array[4], (unsigned char)array[5],(unsigned char)array[6], (unsigned char)array[7],
unsigned char)array[8], (unsigned char)array[9],(unsigned char)array[10], (unsigned char)array[11]);
имеем уже возможность чтения с массивом до 12 строк если строк тока 4 остальным 8-ми присваиваются 0х00 отчитываем первые 4 числа а после все удаляем и потом можно все это присвойть строку и отправить туда от куда функция вызывалась
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2009, 15:12
Если ты что-то пытался у меня спросить, то я вообще ничего не понял. Не понял даже в чём вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2009, 15:12
Помогаю со студенческими работами здесь

Запись и удаление значений реестра
если на этот вопрос найдётся ответ то все предыдущие темы стоит удалить... if (BitnostSistem == bit32) { ...

Считывание данных из ячеек Excel и помещение их в одну строку
Всем доброго временир суток, Ситуация такая: Есть некий экселевский документ с макросом, который по заполненным данным в определенном...

Сделать запись в разделе реестра с именем, содержащим строку %SystemRoot%
Всем привет. reg add HKCU\Console\%%SystemRoot%%_system32_cmd.exe /v FontWeight /t REG_DWORD /d 0x0000190 /f Результат этой команды на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru