Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2021, 17:43   #1
stalkernet
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 42
По умолчанию получить указатель на Record

Доброго дня всем.

нужна помощь ребенку с курсовым.

задание такое.

есть рекорд

Код:
 type
   TFRecTable = record
     FrecInfo : TVector;
     FrecData: TVector;
     FrecDPF : TCVector;
   end;

  type
   PFRecTableArr = ^TFRecTableArr;
   TFRecTableArr = record
     step : double;
     Fx : double;
     TimeGen : double;
     FDiscret : uint64;
     FCount : uint64;
     FrecArr : Tarray<TFRecTable>;
   end;

var 
 Table1, Table2 : TFRecTableArr;
 Buff1,Buff2 : Tbytes
тип TVector : TArray<double>;

Теперь по заданию пункта курсовика нужно скопировать Table1 в Buff1, а Table2 в Buff2. вобщем Record в массив байт. используя MemCopy;

с обычными массивами он разобрался и они копируются... но воткнул с получением указателя на запись. длинну записи в байтах посчитал.

делает таким кодом

Код:
var
xpoint : Pointer;
bufflen : uint32;  // длинна record в байтах
buffpointin,buffpointout: pointer;

buffpointin := xpoint;
buffpointout := buff1;
CopyMemory (buffpointout,buffpointin,bufflen);
вобщем засада в том чтобы как в xpoint положить указатель на Table1 или Table2.
или может это вобще не правильный подход?

Всем заранние спасибо за ответы.

Последний раз редактировалось stalkernet; 01.06.2021 в 17:46.
stalkernet вне форума Ответить с цитированием
Старый 01.06.2021, 21:23   #2
stalkernet
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 42
По умолчанию

Вабщем после уточнения - чтоже всетаки надо. Выяснилось. Как вседа недопанимание.

Надо сделать как в старом делфи сделана работа с типизированым файлом.

type
TFRecTable = record
FrecInfo : array[0..5] of integer;
FrecData: array[0..5] of double;
end;
var
F : file of TFRecTable;
x: TFRecTable;

// ну и собственно нужно реализовать

write(f, x) и read(f,x)

все это нужно сделать через TFileStream и для динамического массива. Пока отправил курить мануал на тему что такое record и как он организован в памяти. ну и чем димачический массив отличается от статического.

насколько я помню и понимаю задачу. без заголовка в файле где что лежит и какой длинны не обойтись. А собирать буфер надо из record-а поэлементно.

типа
записать в буфер x.FrecInfo
записать в буфер x.FrecData
записать в заголовок начало и длинну x.FrecInfo
записать в заголовок начало и длинну x.FrecData
отправить буфер в FileStream.

Я правильно помню? Или есть какаято готовая функция чтения записи record-а?
stalkernet вне форума Ответить с цитированием
Старый 01.06.2021, 21:35   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

SizeOf(x) равен 72 байта, что совпадает с ожидаемым размером 6 интов + 6 даблов, так что писать можно сразу "stream.WriteBuffer(x, SizeOf(x));".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.06.2021, 22:02   #4
stalkernet
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 42
По умолчанию

BDA не спорю. ну а если такая тип:

type
TFRecTable = record
len : uint64;
step : double;
prefx : string;
FrecInfo : array of integer;
FrecData: array of double;
end;

тогда только поэлементно. иначе что откуда читать назад?
или я неправ?
stalkernet вне форума Ответить с цитированием
Старый 02.06.2021, 00:23   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Я не знаю, как в памяти хранится дженерик-массив (который в первом сообщении темы). Элементы динамического массива хранятся в памяти подряд, так что при записи в файл можно записать количество, а затем все элементы массива разом (если рассматривать одномерный динамический массив типов статического размера). Есть библиотека для записи и чтения таких вещей - http://code.google.com/p/kblib/. Можно попробовать там подсмотреть, как это сделать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.06.2021, 03:12   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от stalkernet Посмотреть сообщение
ну а если такая тип
Вы уж определитесь с конкретно с тем, что нужно ребёнку (если он вообще у вас есть).
northener вне форума Ответить с цитированием
Старый 02.06.2021, 12:25   #7
stalkernet
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 42
По умолчанию

northener ребенок не мой. родственики навязали. и нужен ему хороший ремень.... один Copy/Paste на уме. а как работает - не важно. в часном случае получилось - и ладненько. короче по натуре -кодер. хотел от меня готовое решение...

Своего научил пользоватся литературой - достаточно просто подсказать в какую сторону рыть. ну хоть понимает как пишутся алгоритмы. и каких труднестей и внимательности они требют чтобы убедится что все работает как нужно...

BDA Спасибо за сцылку. сэкономит время на разработке проокола обмена. а дальше будет видно - переписовать на свое или смысла нет.
stalkernet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить указатель IntPtr на массив Int IT-Lopata C# (си шарп) 12 01.04.2014 18:13
Как получить указатель на буфер с ранее выделенной памятью? calypso Win Api 1 14.03.2013 14:20
delphi XE2 Передать указатель на тип record в EnumWindows. Вылет в IntOverFlow или AV Человек_Борща Общие вопросы Delphi 8 12.02.2012 21:57
Не получается получить значение из функции через указатель Casper-SC Общие вопросы C/C++ 5 12.01.2012 06:32
Не удается получить указатель на метод systemmind Общие вопросы C/C++ 1 22.09.2011 22:57