Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Динамическая структура  [new]
Поголосый
Guest
Каким образом можно создать динамическую структуру - равную record ?

Может уже есть наработки? За 23 года

Есть предположение, что через getmem выделяем нужный size всех элементов, и при обращение делать нужный offset (А как рассчитать его? По человечески)


Я всё правильно понимаю?
7 июн 18, 22:24    [21477527]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
defecator
Member

Откуда:
Сообщений: 38591
Поголосый
Каким образом можно создать динамическую структуру - равную record ?

Может уже есть наработки? За 23 года

Есть предположение, что через getmem выделяем нужный size всех элементов, и при обращение делать нужный offset (А как рассчитать его? По человечески)


Я всё правильно понимаю?

если ты за 23 года ничего не понял, то пора идти продавцом в макдональдс
7 июн 18, 22:36    [21477547]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59006
Поголосый> Каким образом можно создать динамическую структуру - равную record ?

?

Нужен record, но чтобы память вручную выделять или что?

Posted via ActualForum NNTP Server 1.5

7 июн 18, 22:42    [21477556]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
чччД__
Guest
Поголосый
Каким образом можно создать динамическую структуру - равную record ?

Может уже есть наработки? За 23 года

Есть предположение, что через getmem выделяем нужный size всех элементов, и при обращение делать нужный offset (А как рассчитать его? По человечески)


Я всё правильно понимаю?



да. Вычисли размер записи и выдели память нужной величины Но придется явно приводить к нужному типу (к записи, например).
type
  RMyRec = record
    i : integer;
    d : Double;
  end;
var
  pV: Pointer;
begin
  GetMem(pV, SizeOf(RMyRec));


Или просто объяви нужный тип и тип-указатель, и вызови New():

type
  RMyRec = record
    i : integer;
    d : Double;
  end;
  pMyRec = ^RMyRec;
...
var
  pR : pMyRec;
begin
  New(pMyRec);


Или объяви массив элементов нужного типа и по мере надобности задавай нужную длину:

type
  RMyRec = record
    i : integer;
    d : Double;
  end;

var
  fAR : array of RMyRec;
begin
  SetLength(fAR, 333); 

Хотя, наверное, с массивом не совсем то, что ты хочешь.
7 июн 18, 22:47    [21477562]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59006
чччД> Но придется явно приводить к нужному типу (к записи, например).

Совести. У Вас. Нет. (с) ГПХ

Нельзя в 2018 году человеку нетипизированные указатели советовать.

Posted via ActualForum NNTP Server 1.5

7 июн 18, 22:57    [21477579]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
чччД__
Guest
Гаджимурадов Рустам
чччД> Но придется явно приводить к нужному типу (к записи, например).

Совести. У Вас. Нет. (с) ГПХ

Нельзя в 2018 году человеку нетипизированные указатели советовать.

Ты не удаляй это сообщение, я обязательно припомню и сюда ссылаться буду.
7 июн 18, 23:00    [21477586]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Vlad F
Member

Откуда:
Сообщений: 164
чччД__,

Припоминай, что хочешь. Тамнужно было просто объявить тип как указатель на ту структуру и память выделять ему при помощи AllocMem(), которая заодно ее обнулит. Все.
7 июн 18, 23:22    [21477644]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45698

Поголосый
Каким образом можно создать динамическую структуру - равную record ?

Есть разные варианты в зависимости от того как ты её потом использовать собираешься.

Posted via ActualForum NNTP Server 1.5

8 июн 18, 00:28    [21477752]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Поголосый
Guest
Если динамически, значит динамически. Что - то вроде

s = TRecord.create('string,int,double');
s.write(Idx, value);
v = s.read(Idx);
8 июн 18, 00:38    [21477756]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
чччД__
Guest
А, ночной тролль.
8 июн 18, 00:43    [21477759]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
чччД__
Guest
Поголосый
Если динамически, значит динамически. Что - то вроде

s = TRecord.create('string,int,double');
s.write(Idx, value);
v = s.read(Idx);

Гугли "Delphi superobject"
8 июн 18, 00:45    [21477760]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59006
Поголосый> Что - то вроде s = TRecord.create('string,int,double');

Методы в рекордах в Delphi появились черти когда, ещё в D2006.

Posted via ActualForum NNTP Server 1.5

8 июн 18, 01:01    [21477769]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая структура  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1369
Поголосый
Каким образом можно создать динамическую структуру - равную record ?

Может уже есть наработки? За 23 года

Есть предположение, что через getmem выделяем нужный size всех элементов, и при обращение делать нужный offset (А как рассчитать его? По человечески)


Я всё правильно понимаю?


JS, даже оффсеты вычислять не надо )
8 июн 18, 07:27    [21477847]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить