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

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

10.07.2009, 13:20. Показов 2751. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru