![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание массива из области памяти [D6, Win95/98, NT4, Win2k, WinXP]
Eugene_ © (2002-11-08 11:27:00)Господа мастера, подскажите пожалуйста как создать массив из области памяти. Я считал одной программой в память данные, мне нужно другой программой создать массив из этой области памяти.
Юрий Зотов (2002-11-08 12:14:00) [1]Можно и через указатели. А если не хочется с ними возится и не жалко памяти то Move или CopyMem.
Но!
Насколько я понял, Main.buf - это указатель. В таком случае проще и лучше сначала присвоить ему адрес Вашего статического массива, а уж потом читать данные. Тогда все произойдет как бы само собой, да и двойной расход памяти не потребуется.
Bis (2002-11-08 11:55:00) [2]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];
...
Eugene_ (2002-11-08 11:46:00) [3]To > Bis: Так я и не создаю массив, он у меня создан как статический. Мне его и нужно прочитать из памяти.
Bis (2002-11-08 11:43:00) [4]не надо создавать массив, а надо читать (!) как двумерный массив.
Создай тип структуры массива и разадресуй нужную тебе память. Можешь использовать указатели для пробега по элементам, а можешь индексы.
Eugene_ (2002-11-08 11:37:00) [5]Считал вот так:
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;
Игорь Шевченко (2002-11-08 11:36:00) [6]Переведи :-)