Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
omezik
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 119
#1

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

10.07.2009, 13:20. Просмотров 1724. Ответов 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);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2009, 13:20     Считывание бинарных значений из реестра и запись их в одну строку
Посмотрите здесь:

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

Запись в файл. Все в одну строку - C++
Вот код: void CreateDictionary(char *file_name) { ofstream file_in(file_name); file_in.close(); } void WriteInTheFile(fstream...

Запись нескольких слов в одну строку - C++
Подскажите, пожалуйста, как записать несколько слов в одну строку....мне необходимо, чтобы высчитывалось количество гласных букв в каждом...

Вывод нескольких найденных значений в одну строку - C++
Здравствуйте, помогите пожалуйста в решении данной задачи. Необходимо чтобы по окончанию ввода данных в массив он производил поиск по...

Чтение из реестра бинарных данных в HEX виде. - C++ Builder
Вообщем такое дело, есть в реестре ключ типа REG_BINARY, в нем записаны определенные данные, мне их нужо получить в строковом (string)...

Ввод с клавиатуры массив из пяти целочисленных значений. Вывести их в одну строку через запятую. Получить для массива среднее арифметическое - C++
Введите с клавиатуры в массив пять целочисленных значений. Выведите их в одну строку через запятую. Получите для массива среднее...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 26
10.07.2009, 13:40     Считывание бинарных значений из реестра и запись их в одну строку #2
Когда пишешь код - потрать 5 минут и аккуратно его отформатируй. Ну невозможно в такой помойке ковыряться.

Что в твоём понимании делает код "znachenie = printf("buff = %s\n", buff);"?
И что в твоём понимании делает printf? Просто прежде чем лезть писатьпрограмму ты не считаешь нужным хотя бы разобраться в том, а что же ты делаешь?
omezik
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 119
10.07.2009, 14:04  [ТС]     Считывание бинарных значений из реестра и запись их в одну строку #3
printf сщитает кол-во строк ну все же где сама строка откуда ее взять
да я знаю что программист из меня не какой но я все таки пытаюся я же не виноват что меня так обучали в свое время, приходится задовать глупые вопросы и делать кучу ошибок а как я иначе получу нужный мне результат я программированием занимаюсь только ради интереса а не ради выгоды и тому подобное!!!
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
10.07.2009, 14:07     Считывание бинарных значений из реестра и запись их в одну строку #4
Цитата Сообщение от omezik Посмотреть сообщение
printf сщитает кол-во строк ну все же где сама строка откуда ее взять
Вобще-то, она возвращает количество записанных символов в поток.
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 26
10.07.2009, 14:07     Считывание бинарных значений из реестра и запись их в одну строку #5
printf ПЕЧАТАЕТ строку (в консольном приложении) и уэ точно количество строк не считает (а возвращает количество напечатанных БУКВ). Ты хоть объясни, что твоя функция должна делать. Если вернуть отформатированную строку, то вместо 13 и 14 строк надо писать "return buff;". При этом у тебя есть вторая ветка исполнения, в которую мы попадаем, если условие в if'е на 6-й строке ложно. В этом случае процедура вообще возвращает мусор, при дальнейшем использовании которого почти наверняка программа раком встанет
omezik
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 119
10.07.2009, 14:14  [ТС]     Считывание бинарных значений из реестра и запись их в одну строку #6
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 строку
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 26
10.07.2009, 14:17     Считывание бинарных значений из реестра и запись их в одну строку #7
Покажи всю процедуру целиком и текст ругани. И убери ты строку с printf'ом, я её тебе написал чисто для того, чтобы ты мог посмотреть, что там напечатается. Я не знал, что ты настолько не разбираешься

Добавлено через 33 секунды
и почему в buff только 4 байта?
omezik
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 119
10.07.2009, 14:18  [ТС]     Считывание бинарных значений из реестра и запись их в одну строку #8
С 6 строкой продумано все я просто не пишу ни чего сдесь как и ты говорил лишнее убираю ЧТО БЫ ГЛАЗА НЕ МОЗОЛИТЬ
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 26
10.07.2009, 14:20     Считывание бинарных значений из реестра и запись их в одну строку #9
Ну тогда покажи, как ругается. Почему всё из тебя клещами надо вытаскивать?
omezik
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 119
10.07.2009, 14:25  [ТС]     Считывание бинарных значений из реестра и запись их в одну строку #10
спасибо все получилось я помню что 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);
 }
 }
Вот что получилось
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 26
10.07.2009, 14:33     Считывание бинарных значений из реестра и запись их в одну строку #11
А я тебе сразу писал, что код, который я тебе сделал - он "тупой" ибо заточен на кокнкретную реализацию из 4 чисел, разделённых одним пробелом
omezik
2 / 2 / 0
Регистрация: 30.06.2009
Сообщений: 119
10.07.2009, 15:04  [ТС]     Считывание бинарных значений из реестра и запись их в одну строку #12
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 числа а после все удаляем и потом можно все это присвойть строку и отправить туда от куда функция вызывалась
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2009, 15:12     Считывание бинарных значений из реестра и запись их в одну строку
Еще ссылки по теме:

запись массива в строку - считывание массива из строки. - C++
Под unix на си(не с++). Посоветуйте, как можно реализовать(меня интересуют функции, которые можно использовать для этого)): Есть...

Считывание DWORD с реестра - C++ Builder
Доброго дня..Прошу подсказать где моя ошибка... TRegistry *reg=new TRegistry; reg->RootKey=HKEY_LOCAL_MACHINE; //Как и...

Считывание данных с реестра - C++
День добрый! Я уже, наверное, достал всех сегодня... Но гугл не понимает, что мне надо. Я имею такой код: ...

Считывание значения параметра из реестра - C++ Builder
Здравствуйте!!!! Подскажите, по такому вопросу, пытаюсь считать значение параметра реестра и вывести в Edit и занести в реестр...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 26
10.07.2009, 15:12     Считывание бинарных значений из реестра и запись их в одну строку #13
Если ты что-то пытался у меня спросить, то я вообще ничего не понял. Не понял даже в чём вопрос
Yandex
Объявления
10.07.2009, 15:12     Считывание бинарных значений из реестра и запись их в одну строку
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru