Difference between revisions of "MemoryRecord.Index"

From SunFlurry wiki
Jump to: navigation, search
(Created page with "{{infobox function |name=Index |object=Запись |caption=Информация по записи |t...")
 
m (1 revision imported)
 
(No difference)

Latest revision as of 08:51, 7 February 2021

  Index (Информация по записи)
Объект:Запись
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, строку, неверный индекс, неверное имя поля.
Визуальность:Нет

Функция возвращает смещение указанного поля в байтах от начала записи (для полей-массивов также можно указать индекс массива). Запись может быть не привязана. Важно понимать, что для записей, входящих в другие записи, будет возвращено смещение от начала текущей записи, а не ее родителя.

Синтаксис

MemoryRecord.Index(<Наименование поля (STRING)>,<Индекс массива (INT)>=0):<Смещение к данным поля от начала записи в байтах (INT)>

Аргументы

  • <Наименование поля (STRING)> - Задает наименование поля записи, смещение для которого необходимо найти. Наименование задается без учета регистра.
  • <Индекс массива (INT)> - (необязательный аргумент) Если поле является массивом, аргумент может указывать на индекс массива, смешения для которого необходимо найти. Первый элемент массива имеет индекс 0. По умолчанию, смешение будет найдено для первого элемента массива.

Возвращаемое значение

Возвращается числовое значение.

Примеры

//Заполнение буфера
aBuf:=Buffer.Create(4096);
aBuf.Fill(0,4096,0);
//Байт с позицией 3 равен 132.
aBuf[3]:=132;
//Адрес буфера в системной памяти
aMem:=aBuf.SystemAddress();

//Создание записи
rRec:=MemoryRecord.Create("Value:A6:UI8");
//Создание второй записи с ссылкой на первую
rRec2:=MemoryRecord.Create("V1:UI32,Value:^@rRec");
//Выделение памяти под запись
bBuf:=rRec2.Allocate();
//Запись адреса памяти в начало записи (работает как для x86, так и для x64)
If PointerSize()=4 Then
  bBuf.SetDWord(0,aMem);
Else
  bBuf.SetQWord(0,aMem);
EndIf;

//Будет выведено число 3 (смешение от начала записи rRec, а не rRec2)
Message(rRec2.Value.Index("Value",3));

//Будет выведено число 7 (абсолютное смешение)
Message(rRec2.Index("Value")+rRec2.Value.Index("Value",3));