unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, reinit, ExtCtrls;
type
Tfrmmain =
class(TForm)
Label1: TLabel;
edtext: TEdit;
edtextafter: TEdit;
btdll: TButton;
btend: TButton;
auswertungsm: TMemo;
Label2: TLabel;
Label3: TLabel;
StatusBar1: TStatusBar;
Timer1: TTimer;
procedure btendClick(Sender: TObject);
procedure btdllClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private-Deklarationen }
//DLL nach gebrach aus Speicher entfernen
hDLL : THandle;
public
{ Public-Deklarationen }
end;
type
//Prozedurtypen
TFmtStringUpCase =
function(Text: PChar):PChar;
var
frmmain: Tfrmmain;
//Prozedurvariable
pFmtStringUpCase : TfmtStringUpcase;
implementation
{$R *.dfm}
//Aufruf der Funktion in der DLL
function FmtStringUpCase(text:PChar): PChar;
external '
g:\FmtStr32.dll';
procedure Tfrmmain.btendClick(Sender: TObject);
begin
close;
end;
procedure Tfrmmain.btdllClick(Sender: TObject);
begin
//Protokollanzeige löschen
auswertungsm.Lines.Clear;
//DLL dynamisch laden
hDLL:= LoadLibrary ('
C:\WINDOWS\system32\FmtStr32.dll');
if hDLL <> 0
then
begin
pFmtStringUpcase:= GetProcAddress(hDLL, '
FmtStringUpcase');
auswertungsm.Lines.add('
DLL erfolgreich geladen');
end
else
begin
Showmessage('
Laden der DLL FmtStr32.dll fehlfeschlagen');
exit;
end;
//Funktion aus der DLL aufrufen
edtextafter.Text:= FmtStringUpCase(Pchar(edtext.Text));
auswertungsm.Lines.add('
Funktion in der DLL erfolgreich ausgeführt');
//DLL wieder entladen und Ressoucen wieder freigeben
if hDLL <> 0
then
begin
FreeLibrary(hDLL);
pFmtStringUpCase :=
NIL;
auswertungsm.Lines.add('
Bibiliothek erfolgreich freigegeben');
end;
end;
procedure Tfrmmain.FormCreate(Sender: TObject);
begin
statusbar1.Panels[0].Text:= '
Michael Hertel © 2004';
end;
procedure Tfrmmain.Timer1Timer(Sender: TObject);
begin
statusbar1.Panels[1].Text:= Timetostr(time);
end;
end.