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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2012, 14:22   #1
error404ru
 
Регистрация: 04.04.2012
Сообщений: 4
По умолчанию динамический массив в record. последовательное расположение в памяти

Приветствую всех!
Есть одна проблема. Подключаю стороннюю библиотеку (написана была на СИ-подобном) и в функцию передаю структуру как параметр

если делаю вот так, то все работает.
Код:
  TLevel = record
    iValue1: Integer;
    iValue2: Integer;
    iValue3: Integer;
  end;

  TMainLevels = record
    iSize: Integer;
    iReserved: Integer;
    aLevels: array[0..2] of TLevel;
Функция отрабатывает нормально.

Но суть в том что aLevels должен быть динамическим массивом

Код:
  TLevel = record
    iValue1: Integer;
    iValue2: Integer;
    iValue3: Integer;
  end;

  TMainLevels = record
    iSize: Integer;
    iReserved: Integer;
    aLevels: array of TLevel;
Но так ничего не работает.



Как мне правильно объявить такой динамический массив? или что-то еще надо сделать? чтобы в памяти он располагался последовательно без использования указателя.
error404ru вне форума Ответить с цитированием
Старый 05.04.2012, 07:37   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
const MaxLevels=1023;
type
  TLevel = packed record
    iValue1,iValue2,iValue3: Integer;
  end;

  PMainLevels=^TMainLevels;
  TMainLevels = packed record
    iSize,iReserved: Integer;
    aLevels: array[0..MaxLevels] of TLevel;
  end;
var
  Size:integer;
  MainLevels:PMainLevels;
begin
  Size:=10;
  GetMem(MainLevels,SizeOf(Integer)*2+SizeOf(TLevel)*Size);
  MainLevels.iSize:=Size;
  MainLevels.aLevels[0].iValue1:=1;
//Работа
  FreeMem(MainLevels);
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Послать/принять динамический Record через сокеты VaBank Работа с сетью в Delphi 10 30.07.2015 09:14
Освобождение памяти под динамический массив tsar_ Общие вопросы Delphi 7 24.12.2011 00:37
Динамический массив в Record и отправка его через lux16 Работа с сетью в Delphi 2 18.04.2011 15:33
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
Истинный объём памяти занимаемый записью, record Мессир Общие вопросы Delphi 35 28.01.2008 08:52