[Delphi] lista jednokierunkowa
już szlag mnie trafia, nie wiem o co chodzi, przepisałem z innego mojego programu który działał normalnie, jedyna różnica jest taka, że tutaj procedura jest w bibliotece, ale nie mam pojęcia w jaki sposób może to wpływać na jej działanie. chodzi konkretnie o usuwanie elementu, tutaj kod, zapisany tak łopatologicznie jak tylko się da żeby łatwiej było wam znaleźć ewentualny błąd:
w bibliotece:
Kod:
procedure usun(var root: lista; prejestracja: string); stdcall;
var
temp, usuwany: lista;
begin
if(root^.rejestracja = prejestracja) then begin
usuwany := root;
if(root^.next <> nil) then begin
root := root^.next;
end;
dispose(usuwany);
exit;
end;
temp := root;
while(temp^.next^.rejestracja <> prejestracja) do begin
temp := temp^.next;
end;
usuwany := temp^.next;
if(usuwany^.next <> nil) then begin
temp^.next := usuwany^.next;
end else begin
temp^.next := nil;
end;
dispose(usuwany);
end;
szuka wpisu z rejestracją podaną jako argument i go usuwa, na 3 różnie sposoby, w zależności od tego czy jest to 1. element, ostatni czy jakiś w środku. oczywiście w bibliotece pod koniec:
Kod:
exports
(...)
usun index 2,
(...)
w programie głównym:
Kod:
procedure TForm1.Button3Click(Sender: TObject);
var
lib: HModule;
usun: procedure(var root: lista; prejestracja: string);stdcall;
begin
lib := LoadLibrary('Project1.dll');
usun := GetProcAddress(lib, PChar(2));
usun(root, ListBox1.Items.Strings[ListBox1.ItemIndex]);
wypisz();
end;
i najdziwniejsze jest to że to działa, lista jest wypisywana do listboksów, usuwany jest zaznaczony element, jak odświeżę listboksa to usunięty element znika, w trakcie działania programu wszystko działa jak powinno, ale po zamknięciu jest coś takiego:
http://puu.sh/5GlAP.png
jeśli uruchomię program poza środowiskiem to po zamknięciu i odczekaniu chwili:
http://puu.sh/5GlE1.png
jeśli w programie tylko dodaję elementy do listy albo nic nie robię i od razu go zamknę - wszystko jest ok.
pomocy!