![]() |
Re: Eine DLL freigeben. (CallBack)
Ich habe das doch so gemacht wie du meinst.
Die Variable auf NIL im Destroy ist doch okay. Wenn ich dich richtig verstanden habe darf ich das nicht im Destroy freigeben oder? Ja wann dann? |
Re: Eine DLL freigeben. (CallBack)
Zitat:
|
Re: Eine DLL freigeben. (CallBack)
argghhh...
dann hat Muetze1 mich auf den falschen Pfad gelockt... :-((( |
Re: Eine DLL freigeben. (CallBack)
Zitat:
|
Re: Eine DLL freigeben. (CallBack)
Zitat:
Und ich habe zuvor schon eine gewisse Sortierung in Richtung des Umfangs/Schwierigkeit gegeben, da hat Bernhard Geyer schon Recht. |
Re: Eine DLL freigeben. (CallBack)
Ihr schreibt so als wäre ich jetzt richtig böse, mal lernt halt dazu, jetzt kann ich CallBack wieder hervorkrammen wenn ichs brauche...
Zitat:
|
Re: Eine DLL freigeben. (CallBack)
Hallo,
in der hilfe nach PostMessage suchen. Am besten du definierst dir einen eigene Nachricht
Delphi-Quellcode:
Abschicken mit
const
wm_FreeMyLibrary = wm_User + 100;
Delphi-Quellcode:
Empfangen in der eigenen Procedure
PostMassage(Mainform.Handle, wm_FreeMyLibrary, 0, 0);
Delphi-Quellcode:
Gruß oki
procedure WMFreeMyLibrary(var Message: TMsg); message WM_FreeMyLibrary;
procedure TMainForm.WMFreeMyLibrary(var Message: TMsg); begin // DLL frei geben end; |
Re: Eine DLL freigeben. (CallBack)
Liste der Anhänge anzeigen (Anzahl: 1)
Wie ich in den Debugger schaue und auf diesen Satz hoffe: "Modul entladen: ...". Und er kommt, erstmal danke an alle und besonders an oki aber, auch die anderen haben wieder super geholfen. So und an alle die gleiches Vorhaben werde ich hier mal meinen Code präsentieren:
MainForm
Delphi-Quellcode:
In der DLL.dpr habe ich nichts verändert nur die export Procedure...
type
TMainForm = class(TForm) bDllLaden: TButton; bClose: TButton; procedure bCloseClick(Sender: TObject); procedure bDllLadenClick(Sender: TObject); private // die Variable muss global gespeichert werden damit FreeLibrary ein Ziel hat class var hLib:cardinal; const wm_FreeMyLibrary = wm_User + 100; public procedure WMFreeMyLibrary(var Message: TMsg); message WM_FreeMyLibrary; end; // Die dynamische dekleration einer dll TYPE Tcreatedll = PROCEDURE (FormHandle:HWND); //[...] procedure TMainForm.bDllLadenClick(Sender: TObject); VAR Mcreatedll : Tcreatedll; BEGIN hLib := LoadLibrary(PChar('pDLL.dll')); IF hLib <> 0 THEN BEGIN @Mcreatedll := GetProcAddress(hLib, 'createDll'); IF @Mcreatedll <> NIL // nun wird zusätzlich das handle übergeben, was später benötigt wird THEN Mcreatedll(MainForm.Handle); END; end; procedure TMainForm.WMFreeMyLibrary(var Message: TMsg); begin // hier kann auch alles mögliche stehen, aber dass kann man dann auch in einem callback schreiben freelibrary(hLib); end; DLL Formular
Delphi-Quellcode:
Und nochmal als Download, damit es auch jeder ausprobieren kann; man bin ich glücklich :dancer: :-D :drunken: :firejump:
type
TDllAddons = class(TForm) bClose: TButton; procedure bCloseClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); private const wm_FreeMyLibrary = wm_User + 100; public { Public-Deklarationen } end; //[...] AFormHandle:HWND; PROCEDURE createDll(FormHandle:HWND); //[...] PROCEDURE createDll(FormHandle:HWND); BEGIN IF NOT (Assigned(DllAddons)) THEN DllAddons := TDllAddons.Create(NIL); // parameterübergabe AFormHandle := FormHandle; DllAddons.Show; END; procedure TDllAddons.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TDllAddons.FormDestroy(Sender: TObject); begin // den parameter schön freigeben DllAddons := NIL; // die nachicht senden PostMessage(AFormHandle, wm_FreeMyLibrary, 0, 0); end; |
Re: Eine DLL freigeben. (CallBack)
hi,
schön, dass es klappt. Mein Codeschnipsel hat aber nur den Rest gebracht. Den Weg haben die anderen gewiesen. Gruß oki |
Re: Eine DLL freigeben. (CallBack)
vielleicht noch ein wichtiger Hinweis, das mit dem PostMessage muss in der Hauptunit stehen, von welcher das Handle stammt....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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-2025 by Thomas Breitkreuz