![]() |
Von MDI Child einer DLL auf Funktion in Main zugreifen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Ich versuche, bei einer (dyn.) DLL Einbindung von der MDI der DLL auf eine Funktion in der Main zuzugreifen (Funktion startet FreeLibrary Prozess), erhalte allerdings immer eine Access Violation Meldung. :gruebel: Main, Dll und Midi haben eine Type Erklaerung fuer die aufzurufende Funktion in der Main. Ein Pointer zu dieser Funktion wird beim Aufruf der Dll uebergeben, welche wiederum diesen Pointer an die MDI weitergibt (public Erklaerung einer Type Varibel). Die Midi wird angezeigt, aber bei der FormCloseQuery, in der die Funktion der Main aufgerufen wird, entsteht dann der Fehler. Wohl uebersehe ich etwas oder mache etwas gravierend falsch, sehe aber den Fehler nicht. Fuer denjenigen, der die Geduld hat, haenge ich das Projekt (D6) an. Danke! |
Re: Von MDI Child einer DLL auf Funktion in Main zugreifen
:(
Hat niemand Zeit oder Lust, sich des Problems anzunehmen? |
Re: Von MDI Child einer DLL auf Funktion in Main zugreifen
Hallo,
Dein Problem ist folgendes: Du greifst von der DLL aus auf Deine Hauptanwendung zu. Die Hauptanwendung soll die DLL rausschmeissen und dann zur DLL zurückkehren. Das kann natürlich nicht funktionieren. Hier die Lösung: Du baust Dir eine eigene Message-Konstante:
Delphi-Quellcode:
Jetzt baust Du Dir eine Methode, die die Message verarbeitet:
const
WM_CLOSEFORM = WM_USER + 1;
Delphi-Quellcode:
In Deiner DLL musst Du jetzt nur noch die Message abschicken (mit der richtigen Nummer als Argument):
private
procedure CloseForm(var Msg: TMessage); message WM_CLOSEFORM; . . . procedure TForm1.CloseForm(var Msg: TMessage); begin FreeLibrary(Msg.WParam); end;
Delphi-Quellcode:
Dadurch wird sichergestellt, dass Deine Hauptanwendung die Message erst verarbeitet, wenn die DLL fertig ist.
procedure TmdForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var N: Integer; begin N := 1; PostMessage(Application.MainForm.Handle, WM_CLOSEFORM, N, 0); end; Gruß xaromz |
Re: Von MDI Child einer DLL auf Funktion in Main zugreifen
Das ist es, xaromz!
Danke Dir!! Bin etwas bloed, haette auch in diese Richtung denken sollen, habe mich aber auf den Funktionsaufruf festgebissen. Warum: die Anwendung wird fast vollkommen aus DLLs zusammengestellt, da auf der einen Seite gross (in der Zukunft) und auf der anderen nur nach und nach fertig. Die Idee war, spaeter auch einige "Cleanup/Backup/etc." Routinen in der Main für die MDIs/DLLs zur Verfuegung zu stellen (daher der Funktionsaufruf). Und zur Eile: ohne das "Lego"-Konzept habe ich keine einzige Zeile schreiben koennen. Die erte MDI muss/soll in einer Woche laufen und das Konzept der Main muss bis dahin stehen. Danke nochmals!! :thumb: |
Re: Von MDI Child einer DLL auf Funktion in Main zugreifen
Liste der Anhänge anzeigen (Anzahl: 1)
Habe die Message Procedure eingebunden, funktioniert ohne Access Violation, aber jetzt verschwindet meine Main Form (Exe bleibt aktiv in Memory).
Das Projekt (D6) ist im Anhang (mit Message Procedure). Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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