AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Von MDI Child einer DLL auf Funktion in Main zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Von MDI Child einer DLL auf Funktion in Main zugreifen

Ein Thema von alemone · begonnen am 5. Mär 2006 · letzter Beitrag vom 14. Mär 2006
Antwort Antwort
alemone

Registriert seit: 5. Mär 2006
5 Beiträge
 
#1

Von MDI Child einer DLL auf Funktion in Main zugreifen

  Alt 5. Mär 2006, 11:26
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.

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!
Angehängte Dateien
Dateityp: zip plugintest_202.zip (17,6 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
alemone

Registriert seit: 5. Mär 2006
5 Beiträge
 
#2

Re: Von MDI Child einer DLL auf Funktion in Main zugreifen

  Alt 14. Mär 2006, 10:56


Hat niemand Zeit oder Lust, sich des Problems anzunehmen?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Von MDI Child einer DLL auf Funktion in Main zugreifen

  Alt 14. Mär 2006, 14:47
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:
const
  WM_CLOSEFORM = WM_USER + 1;
Jetzt baust Du Dir eine Methode, die die Message verarbeitet:
Delphi-Quellcode:
private
  procedure CloseForm(var Msg: TMessage); message WM_CLOSEFORM;
.
.
.
procedure TForm1.CloseForm(var Msg: TMessage);
begin
  FreeLibrary(Msg.WParam);
end;
In Deiner DLL musst Du jetzt nur noch die Message abschicken (mit der richtigen Nummer als Argument):
Delphi-Quellcode:
procedure TmdForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
   N: Integer;
begin
  N := 1;
  PostMessage(Application.MainForm.Handle, WM_CLOSEFORM, N, 0);
end;
Dadurch wird sichergestellt, dass Deine Hauptanwendung die Message erst verarbeitet, wenn die DLL fertig ist.

Gruß
xaromz
  Mit Zitat antworten Zitat
alemone

Registriert seit: 5. Mär 2006
5 Beiträge
 
#4

Re: Von MDI Child einer DLL auf Funktion in Main zugreifen

  Alt 14. Mär 2006, 15:12
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!!
  Mit Zitat antworten Zitat
alemone

Registriert seit: 5. Mär 2006
5 Beiträge
 
#5

Re: Von MDI Child einer DLL auf Funktion in Main zugreifen

  Alt 14. Mär 2006, 16:43
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!
Angehängte Dateien
Dateityp: zip plugintest_110.zip (12,9 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz