karlhfreiburg
asked on
Pointers in Delphi 32
My problem is, I have to increment a pointer.
In old 16 bit code, I does it by use
p := ptr(seg(p^),ofs(p^) + n);
but this is not longer possible in delphi 32. So how can I do the
same stuff in 32bit?
Here is some dummy code to make my problem more understandable...
Type
Rec = record
size: integer;
data: array[0..0] of byte;
end;
prec = ^rec;
procedure readmorerecs;
var
p : pointer;
numberofrec: integer;
begin
filestream := tfilestream.create('somefi le',fmopen read);
getmem(p,filestream.size);
filestream.read(numberofre c,sizeof(i nteger));
filestream.read(p^,filestr eam.size);
interpretrec(p,numberofrec );
filestream.free;
end;
procedure interpretrecs(var p; numberofrec: integer);
var
myrec: prec;
begin
myrec := @p;
while numberofrec > 0 do
with myrec^ do
begin
dosomething with myrec
// not possible in 32 bit
myrec := Ptr(Seg(myrec^),Ofs(myrec^ )+Size);
dec(numberofrec);
end;
end; *)
--
info@cpfreiburg.de
In old 16 bit code, I does it by use
p := ptr(seg(p^),ofs(p^) + n);
but this is not longer possible in delphi 32. So how can I do the
same stuff in 32bit?
Here is some dummy code to make my problem more understandable...
Type
Rec = record
size: integer;
data: array[0..0] of byte;
end;
prec = ^rec;
procedure readmorerecs;
var
p : pointer;
numberofrec: integer;
begin
filestream := tfilestream.create('somefi
getmem(p,filestream.size);
filestream.read(numberofre
filestream.read(p^,filestr
interpretrec(p,numberofrec
filestream.free;
end;
procedure interpretrecs(var p; numberofrec: integer);
var
myrec: prec;
begin
myrec := @p;
while numberofrec > 0 do
with myrec^ do
begin
dosomething with myrec
// not possible in 32 bit
myrec := Ptr(Seg(myrec^),Ofs(myrec^
dec(numberofrec);
end;
end; *)
--
info@cpfreiburg.de
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Maybe Size here is meant to be SizeOf(Rec)