Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

Re: Überarbeitung des eigenen Projektes Verbesserungen gesuc

  Alt 16. Sep 2009, 11:45
Da eh keine Exceptions zu erwarten sind, mach ich es immer so:
Delphi-Quellcode:
//Protokoll.Protokolleingang('ControlerBoard', 'DLL-Fkt laden');
OpenDevice := GetProcAddress(DLL_Handle, 'OpenDevice');
CloseDevice := GetProcAddress(DLL_Handle, 'CloseDevice');
ClearAllAnalog := GetProcAddress(DLL_Handle, 'ClearAllAnalog');
ClearAllDigital := GetProcAddress(DLL_Handle, 'ClearAllDigital');
ClearAnalogChannel := GetProcAddress(DLL_Handle, 'ClearAnalogChannel');
ClearDigitalChannel := GetProcAddress(DLL_Handle, 'ClearDigitalChannel');
OutputAnalogChannel := GetProcAddress(DLL_Handle, 'OutputAnalogChannel');
SetDigitalChannel := GetProcAddress(DLL_Handle, 'SetDigitalChannel');
ReadDigitalChannel := GetProcAddress(DLL_Handle, 'ReadDigitalChannel');
ReadAnalogChannel := GetProcAddress(DLL_Handle, 'ReadAnalogChannel');
result := (DLL_Handle <> 0) and Assigned(OpenDevice) and Assigned(CloseDevice)
  and Assigned(ClearAllAnalog) and Assigned(ClearAllDigital) and Assigned(OutputAnalogChannel)
  and Assigned(SetDigitalChannel) and Assigned(ReadDigitalChannel) and Assigned(ReadAnalogChannel)
  and Assigned(ClearAnalogChannel) and Assigned(ClearDigitalChannel);
if not result then doFehlerevent(303);
//Protokoll.Protokollausgang('ControlerBoard', 'DLL-Fkt laden');
GetProcAddress liefert bei nicht gefundener Prozedur NIL und auch bei nicht geladener DLL.


PS: bei nichtgeladener DLL (DLL_Handle = 0) waren die Werte der Prozedur-Variablen nicht definiert
und Result hätte da etwas falsches zurückgeben können.
du hättest praktisch die Auswertung für Result mit in die IF-Abfrage reinmachen müssen.
Delphi-Quellcode:
//Protokoll.Protokolleingang('ControlerBoard', 'DLL-Fkt laden');
if DLL_Handle <> 0 then
begin
  @OpenDevice := GetProcAddress(DLL_Handle, 'OpenDevice');
  ...
  @ReadAnalogChannel := GetProcAddress(DLL_Handle, 'ReadAnalogChannel');
  result := (@OpenDevice <>0) and (@CloseDevice <>0) and (@ClearAllAnalog <>0) and
    ...
    (@ClearDigitalChannel <>0);
end else result := False;
if not result then doFehlerevent(303);
//Protokoll.Protokollausgang('ControlerBoard', 'DLL-Fkt laden');
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat