Меню сайта
Мини-чат
Чтобы добавить сообщение, необходимо авторизоваться.
Главная » Статьи » Не стандартные примеры на Delphi » Pascal

Массивы размером более 64К

Не существует способа непосредственного доступа к массиву размером свыше 65520. Или вы пользуетесь для распределения памяти GlobalAlloc или TMemoryStream, и создаете специализированный класс для доступа к элементам массива, или вы делаете это непосредственно вручную. Добраться до следующих сегментов GlobalAlloc-ого объекта можно, строя указатели с помощью SelectorInc. Самый легкий путь заключается в использовании TMemoryStream.


    Type
Tmyarr = Class
buffer  : TMemoryStream;
elsize  : LongInt;

Constructor Create(esize, number : Word);
Destructor Free;
Procedure SetElement(index : Word; p : Pointer);
Procedure GetElement(index : Word; p : Pointer);
End;

Implementation

Constructor
Tmyarr.Create(esize, number : Word);
Var
size : LongInt;
Begin
Inherited Create;
buffer := TMemoryStream.Create;
elsize := esize;
size := esize * number;
buffer.SetSize(size);
End;

Procedure Tmyarr.Free;
Begin
If Self <> Nil Then
Begin
buffer.Free;
Destroy;
End;
End;

Procedure GetElement(index : Word; p : Pointer);
Begin
buffer.Seek(elsize * index, 0);
buffer.Read(p^, elsize);
End;

Procedure SetElement(index : Word; ptr : Pointer);
Begin
buffer.Seek(elsize * index, 0);
buffer.Write(p^, elsize);
End
Категория: Pascal | Добавил: DelphiAiX (09.05.2012)
Просмотров: 488 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]