Entwickler-Ecke

Dateizugriff - Formular in einer DLL aufrufen, wie?


Delete - Do 28.08.08 08:34
Titel: Formular in einer DLL aufrufen, wie?
Hallo, ich habe eine DLL in der ich zwei Formulare habe.
Wie ich nun ein Formular au der DLL von meiner Hauptanwendung aus starte ist mir bekannt.

Nur wie mache ich folgendes?

Ich rufe Formular1 in der DLL von meiner Hauptanwendung auf.
Auf Formular1 in der DLL befindet sich ein Button über den ich Formular2 in der DLL aufrufen will.
Wie mache ich das?

Ein normales Formular2.ShowModal bringt mir nur einen Fehler ruft aber das Formular nicht auf.

Kann mir da einer weiterhelfen?


Danke


Mike19 - Do 28.08.08 08:39

Hallo,

Zitat:

Ein normales Formular2.ShowModal bringt mir nur einen Fehler ruft aber das Formular nicht auf.


helfen kann bestimmt einer, aber wobei ? Fehler treten immer auf, aber welche?


mkinzler - Do 28.08.08 08:46

Die komplette Fensterverwaltung muss innerhalb der Dll erfolgen. Füge Funktionen für die Steuerung von aussen ein, welche du im Interface der Dll bereitstellst.


ensacom0 - Do 28.08.08 09:20

Ok, ich weiß woran es liegt.
Die Form muss ja auch erst mal erstellt werden.

Form1 wird erstellt wenn ich sie über mein Hauptprogramm aufrufe.
Wie kann ich alle Formen erstellen wenn ich Form1 aus meinem Hauptprogramm aufrufe um anschließend von Form1 in der DLL aus auf die anderen Formulare zugreifen zu können?

Danke


iKilledKenny - Do 28.08.08 09:31


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
uses
  Form2;

{...}

procedure TForm1.OpenForm2;

var   frm: TForm2;

begin
  frm := TForm2.Create (nil);
  frm.ShowModal;
  frm.Free;
end;


ensacom0 - Do 28.08.08 10:07

Ok, ich habe es jetzt so gemacht
Das steht in Form1;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Form zum bearbeiten oder neue anlegen eines Sachbearbeiters aufrufen   +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}

procedure Tfrm_ListBearbeiter.ShowEditBearbeiterForm;
var
  frm: Tfrm_EditBearbeiter;
begin
  frm := Tfrm_EditBearbeiter.Create(nil);
  try
    frm.ShowModal;
  finally
    frm.Free;
  end;
end;




Wenn ich nun Form1 in der DLL aus der Hauptanwendung aufrufe und dann Form2 mit folgender Zeile aufrufe,
erhalte ich nachdem ich mein Hauptform geschlossen habe erhalte ich eine EAccessViolation in module bearbeiter.dll at usw Fehlermeldung


Delphi-Quelltext
1:
    ShowEditBearbeiterForm;                    



Wenn ich allerdings ins onClose der zweiten Form in der DLL das free für die Form reinsetze und das frm.free aus der oben angegebenen Procedure zum erstellen der Form entferne, dann geht es.


Woran liegt das?


ensacom0 - Do 28.08.08 10:30

Habe gerade gesehen, wenn ich anstatt frm.free, frm.FreeOnRelease benutze dann bekomme ich keine Fehlermeldung.