No tak... Jakieś 3 strony temu pisałem, że mam problem z DLL'kiem, tamten rozwiązałem, popisałem trochę, ale pojawił się kolejny :/. Siedzę nad tym z Ktosiem od wczoraj i jakość dojść nie możemy... Jest sobie DLL'ka z dwiema eksportowanymi procedurkami. InitPlugin i FreePlugin. InitPlugin wywoływany jest natychmiast po uruchomieniu programu, natomiast FreePlugin - tuż przed jego zakończeniem. I teraz pojawiły się dwa problemy:

  1. Jak zwalniam pamięć po DLL'ku po wywołaniu procedury FreePlugin, to dostaję AccesViolation. Gdy tego nie robię to działa niby dobrze, ale tak chyba być nie powinno :/
  2. Procedura InitPlugin dodaje do menu głównego programu opcję menu, której kliknięcie powoduje wyświetlenie okienka (to wszystko na razie są testy, dlatego takie bezużyteczne funkcje to ma):
{...}
type TMethodContainer = Class(TObject)
  procedure MenuItemClick(Sender: TObject);
  end;

var
  MethodContainer: TMethodContainer;
MenuItem: TMenuItem;

procedure TMethodContainer.MenuItemClick(Sender: TObject);
begin
  MessageBox(0, 'Witaj! Jestem procedurą z wtyczki test.dll! Kliknąłes w opcję menu.', 'Witam!', MB_OK);
  end;

procedure InitializePlugin(var CocpitForm: TCocpitForm; var MainForm: TMainForm; var ParentApplication: TApplication); stdcall;
var
  PluginsMenu: TMenuItem;
begin
  PluginsMenu:=MainForm.Menu.Items.Find('&Wtyczki');
  MenuItem:=TMenuItem.Create(MainForm);
  MenuItem.Caption:='Opcja z Pluginu';
  MenuItem.OnClick:=MethodContainer.MenuItemClick;
  PluginsMenu.Add(MenuItem);
  end;

I teraz jak włączę program, wtyczka się zainicjuje, wyłączę program, wtyczka się zwolni i wszystko jest OK. Natomiast jak w międzyczasie (w trakcie działania programu) kliknę na tą opcję, to niby wszystko działa, ale po wyłączeniu programu potem dostaję nieskończoną pętlę wyrzucającą mi błędy "Pamięć nie może być read" ;)
Co to może powodować?

//Dopisane:
Hmm... Do części problemu doszedłem: MessageBox zostało wykonane w FreePlugin i program próbował zwalniać pamięć przy wyświetlanym okienku. To powodowało część błędów. Odkomentowałem FreeLibrary, ale jest jeszcze jeden problem. Teraz po kliknięciu w opcję w menu wszystko ładnie się zamyka, ale bez kliknięcia wyskakuje AccesViolation... Już tego nie pojmuję...