AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Interface in DLL -> Form wird nicht angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

Interface in DLL -> Form wird nicht angezeigt

Ein Thema von bjd · begonnen am 20. Aug 2009 · letzter Beitrag vom 20. Aug 2009
 
Benutzerbild von bjd
bjd

Registriert seit: 2. Apr 2006
Ort: Illertissen
4 Beiträge
 
Delphi XE3 Professional
 
#1

Interface in DLL -> Form wird nicht angezeigt

  Alt 20. Aug 2009, 16:21
Hallo,

ich verwende eine DLL, die im Prinzip ein Plugin dastellt. In dieser DLL befindet sich eine Form sowie eine Interface-Implementation. Wenn ich nun über mein Hauptprojekt die Form anzeigen lasse und ihr als Parent bspw. ein TabSheet oder ein Panel zuweise, wird sie nicht angezeigt. Beim TabSheet muss ich einfach auf eine andere Seite navigieren und dann wieder zurück und meine Form ist da - nur wieso? Der Test mit EDA hat ergeben, dass die Form nicht nur nicht angezeigt wird, sondern sich überhaupt nicht lokalisieren lässt - erzeugt wurde sie allerdings. Nach dieser verwirrenden Beschreibung hier der Code:
Das ist mein Interface:
Delphi-Quellcode:
     PSuSecBGInt = ^ISuSecBGInt;
     ISuSecBGInt = interface ['{62A88606-F5DC-4F25-A5B9-6C5E851A9CE9}']
       Procedure SetParent(Const AParent: TWinControl);
       Procedure TryClose;
       Function GetForm: TForm;
     end;
So steht es in der DLL:
Delphi-Quellcode:
  TSuSecBGInt = Class(TInterfacedObject, ISuSecBGInt)
  private
    AForm: TMainForm;
  public
    Procedure SetParent(Const AParent: TWinControl);
    Procedure TryClose;
    Function GetForm: TForm;
  end;

var ISuSec: ISuSecBGInt;

Procedure TSuSecBGInt.SetParent(Const AParent: TWinControl);
Begin
     AForm := TMainForm.Create(NIL);
     AForm.Parent := AParent; { ohne Parent wird die Form angezeigt! }
// AForm.SetBounds(0, 0, 585, 286); { egal ob ich diese Zeile habe oder nicht - es geht nicht! }
     AForm.Show;
End;

Procedure TSuSecBGInt.TryClose;
Begin
     If AForm <> NIL Then Begin
        AForm.Close;
        AForm.Free;
     End;
End;

Function TSuSecBGInt.GetForm: TForm;
Begin
     Result := AForm;
End;

Function GetPMI: PSuSecBGInt; Export;
Begin
     Result := @ISuSec;
End;

Exports GetPMI Name 'PMI';

begin
  ISuSec := TSuSecBGInt.Create;
end.
Der Aufruf ist ganz simpel. Im Hauptprogramm wurde die DLL-Funktion "GetPMI" eingebunden:
Function GetPMI1: PSuSecBGInt; External 'mod1.dllName 'PMI'; Anschließend:
Delphi-Quellcode:
var {Global}
  Plugins: Array[1..1] Of ISuSecBGInt;

Procedure Load1stPlugin;
Begin
     Plugins[1] := GetPMI1^;
     Plugins[1].SetParent(AParent);
End;

Procedure FormClose(...);
var
   I: Integer;
begin
     For I := Low(Plugins) To High(Plugins) Do
         Plugins[I].TryClose;
End;
  Mit Zitat antworten Zitat
 


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 19:27 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