Mal eine ganz dumme Frage-
Ich habe eine Klasse die im Endeffekt nur ein Wrapper für eine
dll ist. Die
Dll wird zur Laufzeit bestimmt, dementsprechend beim Einbinden z.B. auch sorgfältig überprüft, ob die
dll denn auch alles exportiert was man denn gerne haben möchte.
Da ich von Natur aus ein sehr vorsichtiger Mensch bin, überprüfen die Methoden der Klasse auch noch einmal, ob die Einsprungspunkte der
Dll-Routine die sie aufrufen sollen, auch wirklich existiert. Beispiel:
Delphi-Quellcode:
type TMeineKlasse = class
[...]
class var type
TFNLustigeMethodeProc = procedure(parameter1, parameter2: IrgendeinTyp); stdcall;
[...]
lustigeMethodeProc : TFNLustigeMethodeProc;
end;
[...]
constructor TMeineKlasse.Create(...);
begin
[...]
@lustigeMethodeProc := GetProcAddress(dllHandle, 'lustigeMethodeDerDll');
if @lustigeMethodeProc = nil then raise EOSError.Create([...]);
[...]
end;
procedure TMeineKlasse.lustigeMethode();
begin
if @lustigeMethodeProc <> nil then
lustigeMethodeProc(parameter1, parameter2)
else
[Seriöse Fehlerbehandlung]
;
end;
Hat meine
TMeineKlasse
nun bsp. ein Dutzend Methoden, habe ich in meinem Quelltext auch genauso oft ständig das gleiche "if @prozedurPointer <> nil ... werfe
Exception ...".
Kann ich mir nicht einmal eine Methode basteln, der ich die Prozedur inkl. ihrer Parameterbelegung übergebe? Diese Methode schaut dann, ob es nicht
nil
ist und wirft entsprechend Exceptions nach oben sollte es der Fall sein?