Òàê ìîæíî ïîìåùàòü â îäèí áëîê ïàìÿòè çàïèñè èç TList (TCollection):
imlementation
{ To use the value of AHIncr, use Ofs(AHIncr). }
procedure AHIncr; far; external 'KERNEL' index
114;
const
NEXT_SELECTOR: string[13] = 'NEXT_SELECTOR';
function WriteData: THandle;
var
DataPtr: PChar;
i: Integer;
begin
Result := GlobalAlloc(GMEM_SHARE or GMEM_ZEROINIT, {pàçìåp
áîëüøîãî áëîêà});
if Result = 0 then Exit;
DataPtr := GlobalLock(Result);
{çàïèñûâàåì êîë-âî
ýë-òîâ}
Inc(DataPtr, {pàçìåp ñ÷åò÷èêà
ýë-òîâ})
for i := 0 to {íåêèé}Count-1 do
begin
if LongInt(PtrRec(DataPtr).Ofs) + {pàçìåp
ïîäáëîêà} >= $FFFF then
begin
Move(NEXT_SELECTOR, DataPtr^, SizeOf(NEXT_SELECTOR));
{íåêàÿ êîíñòàíòà}
{ êîppåêöèÿ ñåãìåíòà
}
PtrRec(DataPtr).Seg := PtrRec(DataPtr).Seg +
Ofs(AHIncr);
PtrRec(DataPtr).Ofs := $0;
end;
Inc(DataPtr, {pàçìåp íîâîãî
áëîêà});
end; { for i }
GlobalUnlock(Result);
end;
procedure ReadData(DataHdl: THandle);
var
DataPtr : PObjectCfgRec;
RecsCount: Integer;
i: Integer;
begin
if DataHdl = 0 then Exit;
DataPtr := GlobalLock(DataHdl);
RecsCount := PInteger(DataPtr)^;
Inc(PInteger(DataPtr));
for i := 1 to RecsCount do
begin
{ îápàáîòàòü äàííûå }
Inc(DataPtr);
if PString(DataPtr)^ = NEXT_SELECTOR then
begin
PtrRec(DataPtr).Seg := PtrRec(DataPtr).Seg +
Ofs(AHIncr);
PtrRec(DataPtr).Ofs := $0;
end;
end; { for i }
GlobalUnlock(DataHdl);
end;
Dmitry Romanovsky
(2:5080/76.9)