Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 849

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Vopros kasatelno raboti s reestrom.
Esli v reestre imeetsya zapis o date, to ReadDate etu zapis mozget prochitat i iz binarnih dannih preobrazovat obratno v datu.
Esli zge v reestr zapisivaesh proizvolnuyu stroku metodom WriteBinaryData, to ReadBinaryData vidayet Cardinal value. Kak iz etogo Cardinal poluchit obratno string, kotoraya zapisivalas metodom WriteBinaryData?

Ilia Ermakov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ilia Ermakov (статус: 1-ый класс)
Вопрос отправлен: 10 августа 2007, 23:00
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Градов Ю.М.

Здравствуйте, Ilia Ermakov!
Для преобразования бинарной записи в стринг служит процедура procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);

Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 10 августа 2007, 23:12
Оценка за ответ: 3

Комментарий к оценке: A primer kak eto rabotayet?

Ответ #2. Отвечает эксперт: min@y™

Советую прочитать хэлп про метод TRegistry.ReadBinaryData(), там всё разжёвано.

ReadBinaryData method (TRegistry)

Retrieves a binary value from a specified data value associated with the current key.

Delphi syntax:

function ReadBinaryData(const Name: String; var Buffer; BufSize: Integer): Integer;

Description

Call ReadBinaryData to read a binary value from a specified data value associated with the current key. Name is the name of the data value to read. Buffer is the application variable into which to read the registry data. Buffer must be large enough to hold all of the data returned. BufSize specifies the size of Buffer.

If successful, ReadBinaryData writes the requested data into Buffer and returns the number of bytes written. If the Registry entry contains a known type (such as a string), ReadBinaryData raises an exception.

Note: Binary data is typically a complex data structure (a record in Delphi or struct in C++). It might also be an icon or a bitmap although Microsoft recommends against storing graphics objects in the registry for performance reasons.

//=========== Дословный перевод: ===========

Функция читает BufSize байт из параметра реестра с именем Name в буфер var Buffer и возвращает количество прочитанных байт в качестве результата.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 августа 2007, 08:18


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 12 августа 2007, 20:06; участников в обсуждении: 3.
Aleksey P. Kharitonov

Aleksey P. Kharitonov (статус: 3-ий класс), 10 августа 2007, 23:34 [#1]:

Может я ошибаюсь, но не вижу смысла применять здесь функцию BinToHex Почему бы не воспользоваться той же функцией:

function ReadBinaryData(const Name: string; var Buffer: Type; BufSize: Integer)

Где буффер будет типа PChar (или array of Char), выделив ему 255 символов.
Ilia Ermakov

Ilia Ermakov (статус: 1-ый класс), 11 августа 2007, 00:27 [#2]:

Vidayet vot takuyu posledovatelnost, esli ispolzovat array of Char, PChar voobsche nichego ne vidayet. Kak ee preobrazovat v normalniy vid?
\'ö\', #18, #0, \'S\', #15, \'\', #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, \'Ì\', \'õ\', #18, #0, \'t\', \'Ð\', \'A\', \'~\', \'Ù\', \'‹\', \'A\', \'~\', #0, \'ð\', \'ý\', \'\', \'Ì\', \'õ\', #18, #0, \'Z\', \'ˆ\', \'A\', \'~\', \'Œ\', \'õ\', #18, #0, \'*\', \'ˆ\', \'A\', \'~\', \'+\', #0, #0, #0, \'ð\', \'r\', \']\', #0, #4, \'s\', \']\', #0, #20, #0, #0, #0, #1, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #16, #0, #0, #0, #1, #0, #0, #0, #0, #0, #0, #0, #1, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, \'?\', \'õ\', #18, #0, \'t\', #2, #12, #0, \' \', \'÷\', #18, #0, \'W\', #4, \'D\', \'~\', \'0\', \'ˆ\', \'A\', \'~\', \'ÿ\', \'ÿ\', \'ÿ\', \'ÿ\', \'*\', \'ˆ\', \'A\', \'~\', \'›\', \'¸\', \'A\', \'~\', #0, #0, #0, #0, \'S\', #15, \'\', #0, \'˜\', #2, #11, #0, \'+\', #0, #0, #0, \'t\', #2, #12, #0, \'D\', \'ö\', #18, #0, #4, \'s\', \']\', #0, #1, #0, #0, #0, \'H\', \'¥\', \']\', #0, \'+\', #0, #0, #0, #4, #0, #0, #0, \'˜\', #2, #11, #0, \'ü\', \'õ\', #18, #0, \'(\', \'ö\', #18, #0, #3, \'¹\', \'A\', \'~\', \'ð\', \'r\', \']\', #0, #8, \'¼\', \'o\', #0, \'t\', #2, #12, #0, \'D\', \'ö\', #18, #0, #0, #0, #0, #0, \'H\', \'¥\', \']\', #0, \'t\', \'ö\', #18, #0, \'é\', #1, \'D\', \'~\', #0, #0, #0, #0, \',\', \'÷\', #18, #0, \'ˆ\', \'b\', \'B\', \'~\', #14, \'Z\', \'ñ\', \'w\', \'\', #6, #1, \'j\', \'H\', \'¥\', \']\', #0, \'\', #6, #1, \'j\')
Aleksey P. Kharitonov

Aleksey P. Kharitonov (статус: 3-ий класс), 11 августа 2007, 02:30 [#3]:

Ну допустим нам нужно прочитать из реестра бинарную строку:

procedure LoadString(var StrData: String; ... );
var
Buf: array[0..255] of Char;
begin
with TRegystry.Create do
begin
...
ReadBinaryData(Name, Buf, SizeOf(Buf));
StrData:= Buf; // !!!
...
end;
end;


А если использовать тип буффера PChar, для начала под него нужно выделить память функцией AllocMem (или StrAlloc) и только потом производить какие-то действия. В конце необходимо освободить память вызвав FreeMem.
Aleksey P. Kharitonov

Aleksey P. Kharitonov (статус: 3-ий класс), 11 августа 2007, 02:40 [#4]:

Чуть не забыл для порядка нужно сначала очистить буффер вызвав после первого begin\'a:
FillChar(Buf, SizeOf(Buf), 0);
Вадим К

Вадим К (статус: Академик), 12 августа 2007, 12:01 [#5]:

to Ilia Ermakov:
А зачем писать строку методом WriteBinaryData, когда для записи строки есть специальный метод. А во вторых, как строку записываем, Покажите пример. Чувствуется мне, что пишете неверно.
Галочка "подтверждения прочтения" - вселенское зло.
Ilia Ermakov

Ilia Ermakov (статус: 1-ый класс), 12 августа 2007, 20:06 [#6]:

da, Vadim vi pravi, ya ne tot metod ispolzoval. Seychas razobralsya. Vse ochen prosto okazivayetsya. Vsem spasibo, binariki tozge prigodyatsya.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.