Hallo,
ich habe eine eigene StringListen Klasse für Plugin-DLLs geschrieben, damit ich Classes nicht einbinden muss (und sie somit nicht so aufgebläht werden). Die Liste bietet außerdem einige Extra-Funktionen, z.B. einen Filter darauf anzuwenden, d.h. alle Elemente die Filter nicht enthalten werden gelöscht.
Delphi-Quellcode:
procedure TCSList.ApplyFilter(F: string);
var
i: Integer;
begin
for i := 0 to Count - 1 do
if Pos(F, FArray[i]) = 0 then
if i = Count - 1 then
SetLength(FArray, Count - 1)
else
begin
Move(FArray[i + 1], FArray[i], (Count - 1 - i) * 4); // String = 4 Byte Pointer
SetLength(FArray, Count - 1);
ApplyFilter(F); // Count geändert, Schleife neustarten
Exit;
end;
end;
Das ganze basiert auf einem array of string (FArray), Count gibt einfach nur Length(FArray) aus. Das Problem ist, dass nach einem Durchlauf der Speicher irgendwie korrumpiert wird, denn plötzlich tauchen im Array noch andere Strings die irgendwo in der
DLL vorkommen auf und irgendwann ist es dann so kaputt, dass eine A/V geworfen wird.
Vielleicht mögen die String-Pointer es nicht rumgeschoben zu werden? Ich konnte den Fehler nicht finden