Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Eine Funktion der DLL erzeugt einen Fehler beim Schließe

  Alt 22. Jul 2009, 09:01
erstmal zur Fehlermeldung(104);
> GetProcAddress wird keine Exception auslösen, also ist diese Meldung, samt Try-Except "sinnlos"

und wenn du noch den Rückgabewert von GetProcAddress ausgewertet hättest, dann wär dir der falsche bzw. nicht vorhandene Name aufgefallen
Delphi-Quellcode:
function TV_Tische.DLLFunktionen_laden: boolean;
begin
  Protokoll.Protokolleingang('Verschiebetisch', 'DLL-Fkt laden');
  result := DLL_Handle <> 0;
  if result then
  begin
    @MMC_COM_open := GetProcAddress(DLL_Handle, 'MMC_COM_open');
    @MMC_COM_close := GetProcAddress(DLL_Handle, 'MMC_COM_close');
    @MMC_sendCommand := GetProcAddress(DLL_Handle, 'MMC_sendCommand');
    @MST_moving := GetProcAddress(DLL_Handle, 'MST_moving');
    @MMC_setDevice := GetProcAddress(DLL_Handle, 'MMC_setDevice');
    result := Assigned(MMC_COM_open) and Assigned(MMC_COM_close)
      and Assigned(MMC_sendCommand) and Assigned(MST_moving)
      and Assigned(MMC_setDevice);
  end;
  if not result then Fehlermeldung(103);
  Protokoll.Protokollausgang('Verschiebetisch', 'DLL-Fkt laden');
end;
Da GetProcAddress selber erstmal egal ist, ob das Handle gültig ist und im ungültigen Falle ebenfalls NIL zurückbibt, kann man alles z.B. so kürzen
Delphi-Quellcode:
function TV_Tische.DLLFunktionen_laden: boolean;
begin
  Protokoll.Protokolleingang('Verschiebetisch', 'DLL-Fkt laden');
  @MMC_COM_open := GetProcAddress(DLL_Handle, 'MMC_COM_open');
  @MMC_COM_close := GetProcAddress(DLL_Handle, 'MMC_COM_close');
  @MMC_sendCommand := GetProcAddress(DLL_Handle, 'MMC_sendCommand');
  @MST_moving := GetProcAddress(DLL_Handle, 'MST_moving');
  @MMC_setDevice := GetProcAddress(DLL_Handle, 'MMC_setDevice');
  result := Assigned(MMC_COM_open) and Assigned(MMC_COM_close)
    and Assigned(MMC_sendCommand) and Assigned(MST_moving)
    and Assigned(MMC_setDevice);
  if not result then Fehlermeldung(103);
  Protokoll.Protokollausgang('Verschiebetisch', 'DLL-Fkt laden');
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat