![]() |
DLL laden und trotzdem Hauptprogramm benutzen
Delphi-Quellcode:
Hallo,
Procedure TForm1.zeige_DLL(Dateiname, Name:String);
var DLL:TDLL; Handle : THandle; BEGIN Handle := LoadLibrary(PCHAR(ExtractFilePath(ParamStr(0)) + '\Dlls\' + Dateiname)); IF Handle <> 0 THEN BEGIN @DLL := GetProcAddress(Handle, PCHAR(Name)); IF @DLL <> NIL THEN DLL ELSE Showmessage('Fehler beim Laden der Datei "'+Dateiname+'"'); END; FreeLibrary(Handle); END; damit lade ich ein DLL-Formular aus dem Hauptprogramm heraus dynamisch. In der DLL lasse ich das Formulat mit ShowModal anzeigen. Das Problem ist nur, dass wenn ich das Formular auf habe, habe ich KEINEN Zugriff mehr auf das Hauptprogramm, sondern ich muss das Formular der DLL erst wieder beenden. Was kann ich tun, damit ich trotz DLL-Formular immernoch auf das Hauptprogramm zugreifen kann? mfg Tommy82 |
Re: DLL laden und trotzdem Hauptprogramm benutzen
Zitat:
|
Re: DLL laden und trotzdem Hauptprogramm benutzen
anstelle von Show einfach ShowModal verwenden :wink:
ShowModal ist schließlich genau dafür da um den Effekt zu erzielen der dir wohl nicht zusagt. Die Dll kannst du dann natürlich nicht sofort entladen sondern erst wenn den Form aus der DLL geschlossen ist. |
Re: DLL laden und trotzdem Hauptprogramm benutzen
Zitat:
|
Re: DLL laden und trotzdem Hauptprogramm benutzen
Aber wenn ich Show anstatt ShowModal verwende, bekomme ich eine Schutzverletzung
Delphi-Quellcode:
Also das Modal weg und er beendet das Formular wieder, dann das Free weg und es kommt ne Schutzverletzung.
Procedure Anzeigen;
var Form1 : TForm1; BEGIN Form1 := TForm1.Create(NIL); Form1.ShowModal; Form1.Free; END; Vorschläge? mfg Tommy82 |
Re: DLL laden und trotzdem Hauptprogramm benutzen
das Free muss natürlich weg sonst wird es sofort wieder frei gegeben. Und wenn dann eine Schutzverletzung kommt liegt es wahrscheinlich daran das du genau das Gegenteil, von dem was ich geschrieben habe, machst. Du darfst die DLL nicht sofort wieder entladen (also FreeLibrary erst auführen wenn dein Formular auch wirklich geschlossen und frei gegeben wurde)
|
Re: DLL laden und trotzdem Hauptprogramm benutzen
entschuldige meine Unwissenheit, aber wie bekomme ich denn raus ob das Formular nun geschlossen wird ?
Kann das Hauptprogramm das auch irgendwie abfragen? mfg Tommy82 |
Re: DLL laden und trotzdem Hauptprogramm benutzen
Du hast doch ein OnClose im Formular der DLL. Darin kannst du zum Beispiel dem Hauptprogramm über eine Callbackmethode bescheid geben. Oder du sendest eine Message an das Hauptprogramm.
|
Re: DLL laden und trotzdem Hauptprogramm benutzen
habs über die Message gemacht. Dankeschöön
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz