晕!
FBufPointerArray
ointer
//缓冲区指针数组
function TMyStringList.AddObject(A: TObject):Integer;
...
PInteger(PInteger(Integer(FBufPointerArray)+4*(FCount div ObjNumInBuf))^
+(FCount mod ObjNumInBuf)*SizeOf(TObject))^:=Integer(A);
...
constructor TMyStringList.Create(ASize:Integer);
...
FillChar(FBufPointerArray^,SizeOf(Pointer)*FArraySize,0);
try
for i:=0 to FArraySize-1 do
begin
GetMem(P,BufferSize)
//给各个缓冲区分配空间
PInteger(Integer(FBufPointerArray)+i*4)^:=Integer(P);
end;
except
...
destructor TMyStringList.Destroy;
...
for ...
Integer(P):=PInteger(Integer(FBufPointerArray)+4*i)^;
if P<>nil then
FreeMem(P);
...
function TMyStringList.GetObject(Index: Integer): TObject;
...
Result:=TObject(PInteger(PInteger(Integer(FBufPointerArray)+4*(Index div ObjNumInBuf))^
+(Index mod ObjNumInBuf)*SizeOf(TObject))^);
function TMyStringList.SetObject(Index: Integer
A: TObject): Boolean;
...
PInteger(PInteger(Integer(FBufPointerArray)+4*(Index div ObjNumInBuf))^
+(Index mod ObjNumInBuf)*SizeOf(TObject))^:=Integer(A);
OK?