Hallo,
ich versuche gerade, eine PlugIn-Schnittstelle zu konstruieren.
Allerdings im Moment noch ohne Interface's.
Die Kommunikation mit der
Dll funktioniert auch, und bringt erstmal keine Probleme.
Ich habe zusätzlich in der
Dll einen Eventhandler drin, den die Applikation beispielsweise bei einem
Klick aufruft. Speziell befindet sich in der Applikation eine TListBox, bei der die OnClick-Methode wie folgt genutzt wird:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Self.RunEvent(evnClickItem, Sender);
end;
function TForm1.RunEvent(EventNotification: TEventNotification; Sender: TObject): Boolean;
// ...
if FPlugIns[I].PlugIn.EventHandler(EventNotification, Sender) = evnAbort then
// ...
end;
In der
Dll wird das Event wie folgt verarbeitet:
Delphi-Quellcode:
function TPlugTest.EventHandler(EventNotification: TEventNotification;
Sender: TObject): TEventAction;
Var
ListBox1 : TListBox;
begin
if ( EventNotification = evnClickItem ) then begin
ListBox1 := TListBox(Sender);
ListBox1.Items.Strings[ListBox1.ItemIndex] :=
ListBox1.Items.Strings[ListBox1.ItemIndex] + '1';
end;
Result := evnOk;
end;
Wie man sieht, macht die Funktion nicht wirklich was sinnvolles, aber zu Demonstrationszwecken reicht es.
Was ist nun das Problem?!
Das ganze funktioniert leider nur 4 Mal. D.h. ich klicke zum Testen immer wieder auf das gleiche Element. Beim fünften Mal ( also 4 Einsen wurden schon angehangen ), kommt auf einmal eine
Access Violation.
Jemand eine Idee, woran das Liegen kann ?