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.dll'
name '
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.