Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.18;
Скачать: CL | DM;

Вниз

Создание массива из области памяти   Найти похожие ветки 

 
Eugene_ ©   (2002-11-08 11:27) [0]

Господа мастера, подскажите пожалуйста как создать массив из области памяти. Я считал одной программой в память данные, мне нужно другой программой создать массив из этой области памяти.


 
Игорь Шевченко ©   (2002-11-08 11:36) [1]

Переведи :-)


 
Eugene_ ©   (2002-11-08 11:37) [2]

Считал вот так:

FileSeek(Main.FHandle,0,0);
Main.fsize := FileSeek(Main.FHandle,0,2);
FileSeek(Main.FHandle,0,0);

Main.buf := AllocMem(Main.fsize);
FileRead(Main.FHandle,Main.buf^,Main.fsize);

Теперь нужно из этого Main.buf создать двумерный массив, в том файле из которого читается этот массив был записан на диск, но на прямую читать вот так файла мне не нужно.
v

with TFileStream.Create("Data.dat", fmShareExclusive) do begin
ReadBuffer(ERF, SizeOf(ERF));
Free;
end;


 
Bis ©   (2002-11-08 11:43) [3]

не надо создавать массив, а надо читать (!) как двумерный массив.
Создай тип структуры массива и разадресуй нужную тебе память. Можешь использовать указатели для пробега по элементам, а можешь индексы.


 
Eugene_ ©   (2002-11-08 11:46) [4]

To > Bis: Так я и не создаю массив, он у меня создан как статический. Мне его и нужно прочитать из памяти.


 
Bis ©   (2002-11-08 11:55) [5]

2Eugene_
неужели как статический, я думал, что динамический

пример
TElem = record F1: Integer; end;
TArray = array [1..100,1..100] of TElem;
PArray = ^TArray;

var el: TElem;
begin
...
el:=PArray(PMain.buf)^[i,j];
...



 
Юрий Зотов ©   (2002-11-08 12:14) [6]

Можно и через указатели. А если не хочется с ними возится и не жалко памяти то Move или CopyMem.

Но!
Насколько я понял, Main.buf - это указатель. В таком случае проще и лучше сначала присвоить ему адрес Вашего статического массива, а уж потом читать данные. Тогда все произойдет как бы само собой, да и двойной расход памяти не потребуется.



Страницы: 1 вся ветка

Текущий архив: 2002.11.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
1-59116
Soors
2002-11-05 21:52
2002.11.18
Запись в EXE


1-59153
pag77
2002-11-08 19:32
2002.11.18
кто знает как MessageDlg вывести поверх всех окон?


4-59477
_sMile
2002-10-07 14:05
2002.11.18
С --> Pascal


1-59140
Zn
2002-11-08 16:06
2002.11.18
Индикация выполнения процесса в StatusBar.


1-59281
TankMan
2002-11-05 17:00
2002.11.18
Сразу менять курсор...