Andrew Johnson wrote 17 lines
var
myarray : ^TObject;
begin
...//do stuff
reallocmem(myarray, 4*SizeOf(TObject));//allocmem to handle 4 objects
myarray[2] := thisobject;//set the 3 entry
...//do stuff.
reallocmem(myarray, 0);//free memory
end;
you simply use reallocmem in place of setlength, and multiply the length by
the sizeof the type it contains.. at one point I actually created wrappers
arround this to make more like Delphi dynamic arrays..but its been awhile so
I do not know if I still have it. essentially though you should be able to
port a lot of code with ease. by doing some sort of wrappers.. etc.
Andrew
Andrew (and others):
I've successfully been using the above to manage arrays of records, but I finally tried to do objects this way and it won't work. Here's the code snippett:
procedure TFrmMain.PrintChecks;
var
MyPrints: ^TChkTransaction; // array of transactions to print
begin
writeln('Reallocating memory');
reallocmem(MyPrints, 0);
writeln('Zeroed.');
end;
Notice, I define a pointer and then attempt to make sure that the array is zero length to begin with (actually I added this just because I was testing why it crashed when I tried to set it the first time.)
It access violations before the writeln('Zeroed.') is executed.
At this point, I can't think of any reason it would cause a crash. All I have is a pointer and I attempt to reallocate the memory for it...
It crashes on reallocmem regardless of the size I specify: reallocmem(MyPrints, 0)
and
reallocmem(MyPrints,(2 * sizeof(TChkTransaction))) both result in a crash. Am I doing something wrong?
-Tony