Einzelnen Beitrag anzeigen

Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 

Re: Nochmal DLL Programmierung

  Alt 1. Okt 2003, 07:39
So, anbei nun ein kleines Beispiel für Delphi 6. Vom Prinzip her ist es ganz einfach:

Neues Projekt erstellen (Project1) mit einem Formular:
Delphi-Quellcode:
object Form1: TForm1
  Left = 192
  Top = 107
  Width = 274
  Height = 113
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Shell Dlg 2'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 16
    Top = 16
    Width = 241
    Height = 21
    TabOrder = 0
    Text = 'Edit1'
  end
  object Button1: TButton
    Left = 184
    Top = 48
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 1
  end
  object Button2: TButton
    Left = 16
    Top = 48
    Width = 100
    Height = 25
    Caption = 'DLL ausf'#252'hren'
    TabOrder = 2
    OnClick = Button2Click
  end
end
Der Quellcode ist einfach:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
  public
  end;

procedure DLLTest; external 'Project2.dllname 'Test';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
  // Aufruf der DLL
  DLLTest;
end;

end.
Wichtig! In den Projektoptionen das Package VCL und RTL einbinden, sonst KANN es nicht gehen.

Dann weiteres neues Projekt als DLL-Project (Project2) im gleichen Verzeichnis erstellen.

Als Quellcode für reicht:
Delphi-Quellcode:
library Project2;

uses
  SysUtils,
  Classes,
  Forms,
  StdCtrls;

{$R *.res}


procedure Test;
begin
  TEdit(Screen.Forms[0].FindComponent('Edit1')).Text := 'Test aus DLL';
  TButton(Screen.Forms[0].FindComponent('Button1')).Caption := 'geändert';
end;

exports
  Test;

begin

end.
Auch hier unbedingt in den Projektoptionen die Packages VCL und RTL einbinden. Dann ist es gar kein Problem.

Aber! Ich persönlich halte von dem Projekt gar nix, ich habe nur die technischen Möglichkeiten gezeigt. Der Zugriff einer DLL auf die Hauptanwendung macht meiner Meinung nach keinen Sinn. In eine DLL sollten nur in sich geschlossene Funktionen ausgelagert werden, sonst ist die Quellcode-Pflege einefach schwierig.
Angehängte Dateien
Dateityp: zip dllzugriff.zip (3,6 KB, 7x aufgerufen)
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat