Einzelnen Beitrag anzeigen

rbonk

Registriert seit: 10. Aug 2006
3 Beiträge
 
#4

Re: Grosse Probleme mit delphi-dll.

  Alt 10. Aug 2006, 13:54
Hallo Karlheinz,

der Code Deiner DLL ist etwas konfus (Verzeihung). Hier mein Vorschlag.

Delphi-Quellcode:
unit dll_mit_fenster;

interface

uses
  {### ShareMem,
    Diese Unit - falls notwendig - ganz zuerst in der DLL-Projektdatei
    (*.dpr) einbinden. Siehe Delphi-Doku.}

  inifiles, Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, ComCtrls, StdCtrls, Buttons, ExtCtrls,
  IdBaseComponent, IdMessage;

{### die Klassendefinitionen können in den Implementation- Teil der Unit}


///*** die DLL-Deklarationen
function ZeigeFenster(const PanelBreite :Integer) : Integer; stdcall; {## export;}
  {### 'export' - Anweisung ist überflüssig.}


implementation

type
  {## TKischAlles = class(TComponent)
    diese Klasse ist überflüsssig, einfacher gleich eine Klasse von TForm
    ableiten:
  }

  TKischFenster = class (TForm)
  private
    FKischPanel : TPanel;
  public { Public declarations }
    constructor Create(AOwner: TComponent); override;
    {### destructor Destroy; override; }
    Procedure ZeigeFenster(PanelBreite: Integer);
  end;

var
  KischFenster : TKischFenster = Nil;
{### Deklariere eine mit Nil initialisierte Instanzvariable des Fensters,
    damit bei jedem Aufruf einer DLL- Funktion(en) die Instanz verwendet
     werden kann }


//----------- TKischFenster

constructor TKischFenster.Create(AOwner: TComponent);
begin
  CreateNew(AOwner);
{### Konstruktor CreateNew verwenden, weil es keine *.DFM- Datei zu dem Form
     gibt!}


  SetBounds (200,200,500,300);
  Caption := 'Jippi-ey-hey.';
  FKischPanel := Tpanel.Create(Self);
  with FKischPanel do begin
    Parent := Self;
{### Initialisiere das Panel mit default-Eigenschaften}
    SetBounds (100, 100, 100, 20);
    Caption := '0,0 % Fett';
  end;
end;

Procedure TKischFenster.ZeigeFenster(PanelBreite: Integer);
begin
  FKischPanel.Width := PanelBreite;
  Show;
end;

//----- DLL-Export
function ZeigeFenster(const PanelBreite :Integer) : Integer; stdcall;
begin
  if KischFenster = Nil then
    KischFenster := TKischFenster.Create(Nil);
  KischFenster.ZeigeFenster(PanelBreite);
end;

//-----------
initialization
finalization
{### das Fenster muss irgendwann wieder gelöscht werden - spätestens jetzt !}
  KischFenster.Free;
end.
  Mit Zitat antworten Zitat