Hi!
Ich habe ein Problem, versuche in eine MidiForm eine Dll dynamisch zu laden (mit einem MidiChild). Beim Aufruf werden 2 Parameter uebergeben, einer als TApplication, der zweite eine Exit Procedure, die vom MidiChild beim FormCloseQuery aufgerufen werden soll, um in der Main App den FreeLibrary Prozess in Gang zu setzen.
Das MidiChild laedt ordentlich, beim FormCloseQuery rufe ich also die Prozedur auf und .... Error.
Hier die Programmstruktur:
Main App:
Delphi-Quelltext
1: 2: 3:
| Type TExitMidi=Procedure(Idx:Integer); TExecMidi=Procedure(Par1:TApplication;Par2:Pointer); |
Sowohl in der Dll als auch im MidiChild existiert diese Erklaerung ebenfalls.
Aufruf der Dll von der Main App:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Modules1Click(Sender: TObject); Var Prg:TExecMidi; EM:^TExitMidi; begin if LHdl=0 then begin EM:=@TForm1.CloseMidi; LHdl:=LoadLibrary('MidiDLL'); if LHdl<>0 then begin @Prg:=GetProcAddress(LHdl,'RunPlugin'); if @Prg<>Nil then Prg(Application,EM); else ShowMessage('MidiDLL not found!'); end; end; |
Exit Procedure in der Main:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Procedure TForm1.CloseMidi(Index:Integer); begin FreeLibrary(LHdl); end; |
Prozedur in der Dll:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure RunPlugin(MainApp:TApplication;ExitPrg:TExitMidi); begin if not Assigned(MOwn) then begin MOwn:=Application; Application:=MainApp; end; frm:=TmdForm.Create(MOwn.MainForm); frm.ExitEvent:=ExitPrg; frm.Show; end; |
Programmteil des MidiChild:
...
Delphi-Quelltext
1: 2: 3:
| public ExitEvent:TExitMidi; Idx:Integer; |
FormCloseQuery:
...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TmdForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); Var n:Integer; begin n:=1; ExitEvent(n); end; |
Ziemlich lang alles, aber hilft vielleicht, das Problem zu loesen. Die Anwendung wird hauptsaechlich aus Plugins bestehen (weil gross und nur nach und nach fertiggestellt, eine PostGre Anwendung mit vielen Modulen!)
Kann mir jemand helfen? Bin ziemlich verzweifelt, da mir die Kenntnisse fehlen, die Ursache herauszufinden.
Danke!!
Moderiert von
matze: Delphi-Tags hinzugefügt