Einzelnen Beitrag anzeigen

Benutzerbild von dor557
dor557

Registriert seit: 24. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Dll Forms... oder ligt es nicht daran ??

  Alt 18. Aug 2007, 15:43
erst mal meine dateien :

die Library :

Delphi-Quellcode:
library Kundendaten;


uses
  SysUtils,
  Classes,
  forms,
  kMain in 'kMain.pas{KundendatenF};
{$E dll}

{$R *.res}

Procedure PluginMain(Befehl : PChar; Parameter : Pointer); stdcall;
begin
  KundenDatenF := TKundenDatenF.Create(Application);
  try
    KundenDatenF.Show;
  finally
    KundenDatenF.Release;
  end;
end;

exports
 PluginMain;

begin
end.
so nun die KMain.pas :

Delphi-Quellcode:
unit kMain;

interface

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

type
  TKundendatenF = class(TForm)
    Button1 : TButton;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  KundendatenF: TKundendatenF;

implementation

{$R *.dfm}

end.
das sind die Daten gewesen aus der DLL.

Nun mache ich in der Hauptanwendung Folgendes :
ich habe mir eine unit Plugins angelegt die so aussieht :

Delphi-Quellcode:
unit plugins;

interface
uses SysUtils, windows, Dialogs, forms;

type TPlugin = procedure(Befehl : PChar; Parameter : Pointer); stdcall;
procedure PluginMain(Befehl : PChar; Parameter : Pointer);

implementation

procedure PluginMain(Befehl : PChar; Parameter : Pointer);
var Plugin: TPlugin;
    Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'..\lib\kundendaten.dll'));
  if Handle <> 0 then begin
    @Plugin := GetProcAddress(Handle, 'PluginMain');
    if @Plugin <> nil then begin
      Plugin(Befehl, Parameter);
    end;
    FreeLibrary(Handle);
  end;
end;

end.
und das Hauptfenster in der anwendung hat folgendes aussehen :

Delphi-Quellcode:
unit HostFenster;

interface

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

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

var
  Form1: TForm1;

implementation
uses plugins;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  PluginMain('',nil);
end;

end.
jetzt sobald ich auf den Button1 klicke um das Plugin zu starten bekome ich folgenden Fehler (Keine Fehlermeldung)

Er erstellt das Formular. und das Verschwindet sogleich wieder.. Kann also nicht daran arbeiten.

Kann mir jemand sagen warum ?

gruss Sascha
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat