Here's an up to date image of what I get when I do a DumpInterfaces
Apparently my 10 second wait at the end isn't enough to prevent a crash :(

Maybe if someone knows reflection well they could look into
"Freeing Plugins[1]"
Do not know if that has any bearing on the above problem.
Here's the code:
// This code is by Zephyrsfury
function GetChildComponentText(ParentI, ChildI, CompI: Integer): String;
var
Text, Child, Comp: Integer;
begin
Child := GetInterface(ParentI, ChildI);
Comp := SmartGetFieldArrayObject(Child, hook_interface_GetChildren, compI); //Getting the children components of the Child component
Text := SmartGetFieldObject(Comp, hook_interface_GetText);
Result := GetJavaString(Text, 255);
SmartFreeObject(Text);
SmartFreeObject(Comp);
SmartFreeObject(Child);
end;
// Do not include quotation marks if you're harvesting the string
procedure DumpAllInterfaces (maxChild, maxComponent : Integer);
var Iin, Ich, Ico : Integer;
Sch, Sco : String;
AValidInterface : TIntegerArray;
begin
AValidInterface := GetValidInterfaces;
writeln ('Number of interfaces available: '+inttostr(high(AValidInterface)));
writeln ('-----------------------------------');
for Iin:=0 to high(AValidInterface) do
begin
writeln ('<Interface #'+inttostr(AValidInterface[Iin])+'>');
for Ich:=0 to maxChild do
begin
Sch := GetInterfacetext(AValidInterface[Iin], Ich);
if Sch <> '' then writeln (' <Child #'+inttostr(Ich)+'>: "'+Sch+'"');
for Ico:=0 to maxComponent do
begin
Sco := GetChildComponentText (AValidInterface[Iin], Ich, Ico);
if Sco <> '' then writeln (' <Component #'+inttostr(Ico)+'>: "'+Sco+'"');
end;
end;
end;
writeln ('Waiting 10 seconds to prevent program crash'); // doesn't stop the crash
wait (10000); // doesn't help
writeln ('Dump All Interfaces completed.');
end;
It seems that the more interfaces you go through, the longer the wait has to be before it crashes. I assume something isn't getting freed?