Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi dll mit Fenster (https://www.delphipraxis.net/142415-dll-mit-fenster.html)

paperboy 27. Okt 2009 19:52


dll mit Fenster
 
hallo zusammen,

ich wollte eine dll programmieren die ein fenster anzeigt...
hier der code der dll:

Delphi-Quellcode:
library Project5;

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

procedure start;
begin
  Unit3.Form3.Show;
end;

exports start;

begin
end.
hier der code der exe die die dll benutzen soll:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

const
  DLLNAME = 'project5.dll';

procedure start; external DLLNAME;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
start;
end;

end.
ich bekomme jedoch eine zugriffsverletzung wenn ich nun über den button das fenster anzeigen lassen will...
wenn ich in der funktion der dll z.b. ein simples ShowMessage('Hallo') nehme dann zeigt er mir die Messagebox auch an...
was mache ich falsch?

lg paperboy

wicht 27. Okt 2009 20:13

Re: dll mit Fenster
 
Hast du Form3 in Unit3 auch irgendwie mittels Create vorher erstellt? In einem VCL-Projekt wird der Code dazu ja automatisch generiert, in einer DLL so nicht...

paperboy 27. Okt 2009 20:21

Re: dll mit Fenster
 
oh das wusste ich nicht... danke dir..
mit Form3:= TForm3.Create(nil) vor dem Form3.Show hats jetzt geklappt...

lg paperboy

paperboy 27. Okt 2009 20:59

Re: dll mit Fenster
 
gibt es auch eine möglichkeit ein fenster aus dem hauptprogramm durch code aus der dll anzeigen zu lassen?

tschuldigung für den doppelpost... wollte eigentlich auf edit klicken!

Bernhard Geyer 27. Okt 2009 21:07

Re: dll mit Fenster
 
Ja, indem du eine Callbackschnittstelle definierst.
Du hast eine Prozedur im Hauptprogramm und übergiebst die Adresse dieser Prozedur an die DLL. Diese Ruft die dann bei Bedarf auf.

paperboy 27. Okt 2009 21:28

Re: dll mit Fenster
 
könntest du dazu vllt ein kleines beispiel nennen? wäre dir sehr dankbar... hab grad mal gegoogelt aber die was ich dort gefunden hab ist doch sehr verwirrent..

mkinzler 27. Okt 2009 21:32

Re: dll mit Fenster
 
Erzeuge eine Prozedur/Funktion in der Dll, welche das Fenster Erzeugt, eine sie das Fenster anzeigt, eine die es ausblendet, eine die es zerstört usw. Diese kannst du dann exportieren

paperboy 27. Okt 2009 21:40

Re: dll mit Fenster
 
das problem ist das ich nicht weis wie... ich kann ja schlecht in der dll Form1.Create Form1.Show etc.. benutzen wenn form1 aus meinem hauptprogramm kommt...
wenn dies für einen neuling eine übertriebene aufgabe ist bitte nicht scheuen mir das klipp und klar zu sagen... ich bin am lernen und hatte gedacht das dies vllt
nicht unbedingt zu schwer wäre...

RWarnecke 27. Okt 2009 21:41

Re: dll mit Fenster
 
Schaue Dir mal diese kleine Beispiel an. Damit solltest Du etwas anfangen können.

paperboy 27. Okt 2009 21:54

Re: dll mit Fenster
 
aber wenn ich das richtig verstehe wird die funktion ja im hauptprogramm aufgerufen?!
ich möchte nachdem ich ein fenster aus der dll durch einen button auf der hauptform angezeigt habe nun durch einen knopfdruck auf dem dll-fenster
wieder das hauptfenster angezeigt bekommen... falls diese funktion in dem beispiel genau das tut entschuldige ich mich und knie mich nochmla rein..


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.
Seite 1 von 2  1 2      

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