Bevor ihr hier solche Verrenkungen macht:
In folgendem Beispiel kann sich so eine Klasse erst lohnen:
Delphi-Quellcode:
unit Unit2;
interface
uses Windows, Sysutils;
type
IPS7Exception =
class(
Exception);
IPS7Open=function(IPAdr : PChar; Rack : LongWord; Slot : LongWord; RxTimeout : LongWord; TxTimeout : LongWord ; ConnectTimeout : LongWord) : LongInt;
stdcall;
TIPS7 =
class
Constructor Create;
Destructor Destroy;
override;
private
FDLL:THandle;
FIPS7Open:IPS7Open;
FConnectTimeout: LongWord;
FRack: LongWord;
FSlot: LongWord;
FRxTimeOut: Longword;
FTxTimeout: LongWord;
FIPAdr: AnsiString;
procedure SetConnectTimeout(
const Value: LongWord);
procedure SetIPAdr(
const Value: AnsiString);
procedure SetRack(
const Value: LongWord);
procedure SetRxTimeOut(
const Value: Longword);
procedure SetSlot(
const Value: LongWord);
procedure SetTxTimeout(
const Value: LongWord);
public
property IPAdr:AnsiString
read FIPAdr
write SetIPAdr;
property Rack :LongWord
read FRack
write SetRack;
property Slot :LongWord
read FSlot
write SetSlot;
property RxTimeOut:Longword
read FRxTimeOut
write SetRxTimeOut;
property TxTimeout:LongWord
read FTxTimeout
write SetTxTimeout;
property ConnectTimeout:LongWord
read FConnectTimeout
write SetConnectTimeout;
function Open:Longword;
end;
implementation
const
spsDll = '
IPS7LNK.DLL';
{ TIPS7 }
constructor TIPS7.Create;
begin
FDLL:=Loadlibrary(spsDLL);
if FDLL=0
then
raise IPS7Exception.CreateFmt('
Fehler beim Laden der DLL: %s',
[syserrormessage(getlasterror)]);
FIPS7Open:=GetProcAddress(FDLL,'
IPS7Open');
if not assigned(FIPS7Open)
then
raise IPS7Exception.CreateFmt('
Fehler beim LAden der Funktionsadresse: %s',
[syserrormessage(getlasterror)]);
end;
destructor TIPS7.Destroy;
begin
FreeLibrary(FDLL);
inherited;
end;
function TIPS7.Open: Longword;
begin
result:=FIPS7Open(PAnsiChar(FIPAdr),FRack,FSlot,FRxTimeout,
FTxTimeout,FConnectTimeout);
end;
procedure TIPS7.SetConnectTimeout(
const Value: LongWord);
begin
FConnectTimeout := Value;
end;
procedure TIPS7.SetIPAdr(
const Value:
String);
begin
FIPAdr := Value;
end;
procedure TIPS7.SetRack(
const Value: LongWord);
begin
FRack := Value;
end;
procedure TIPS7.SetRxTimeOut(
const Value: Longword);
begin
FRxTimeOut := Value;
end;
procedure TIPS7.SetSlot(
const Value: LongWord);
begin
FSlot := Value;
end;
procedure TIPS7.SetTxTimeout(
const Value: LongWord);
begin
FTxTimeout := Value;
end;
end.
Damit hat man auch gleich einen Container für die Parameter und kann hier noch weitere Funktionen kapseln. Bringt natürlich nur etwas, wenn man diesen Container auch benötigt.
Zudem habe ich
DLL noch dynamisch eingebunden. Dadurch führt ein Fehlen der
DLL nicht gleich zum Nichtstarten des Programms. Bringt auch nur etwas, wenn das Programm auch ohne diese
DLL einen Sinn macht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.