Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.427 Beiträge
 
Delphi 7 Professional
 
#7

AW: GhostScript: Zugriffsverletzung

  Alt 6. Jul 2020, 13:11
mmmmmhhhh.... weiß nicht so recht:
Delphi-Quellcode:
if TFile.Exists(CurrentDLLPath) then
begin
  FDLLHandle := LoadLibrary(PChar(CurrentDLLPath));
end;

if FDLLHandle > 0 then
Wat iss denne, wenn FDLLHandle vor dem if TFile.Exists(CurrentDLLPath) then 'nen Wert > 0 hat?

Von mir aus sowas:
Delphi-Quellcode:
if not TFile.Exists(CurrentDLLPath) then begin
  // Fehlerloggen
  Result := false;
  exit;
end;
aber keinerfalls bei fehlender DLL noch irgendwas in der Routine machen außer Result := false;
Eventuell noch hinter das erste Begin am Anfang der Routine ein Result := False; als grundsätzlich erstmal festgelegter Rückgabewert der Funktion, der nur bei Erfolg auf true geändert wird.
Delphi-Quellcode:
function TGhostscript.LoadDLL(PathDLL: string): Boolean;
var
  CurrentDLLPath: string;
begin
  Result := false;
  if PathDLL = 'then
  begin
    CurrentDLLPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + conDLLName;
  end
  else
  begin
    CurrentDLLPath := PathDLL;
  end;

  if TFile.Exists(CurrentDLLPath) then
  begin
    FDLLHandle := LoadLibrary(PChar(CurrentDLLPath));
    if FDLLHandle > 0 then
    begin
      FGsInit := GetProcAddress(FDLLHandle, 'gsapi_new_instance');
      Result := (FGsInit(@FGsInstance, nil) = 0);
      if Result then
      begin
        FGsApiInitWithArgs := GetProcAddress(FDLLHandle, 'gsapi_init_with_args');
        if not Assigned(FGsApiInitWithArgs) then
        begin
          FOnError(Self, 'GsApiInitWithArgs konnte nicht ermittelt werden.');
          FLog.Log('GsApiInitWithArgs konnte nicht ermittelt werden.');
          Result := False;
        end;
        FGsApiExit := GetProcAddress(FDLLHandle, 'gsapi_exit');
        if not Assigned(FGsApiExit) then
        begin
          FOnError(Self, 'GsApiExit konnte nicht ermittelt werden.');
          FLog.Log('GsApiExit konnte nicht ermittelt werden.');
          Result := False;
        end;
        FGsApiDeleteInstance := GetProcAddress(FDLLHandle, 'gsapi_delete_instance');
        if not Assigned(FGsApiDeleteInstance) then
        begin
          FOnError(Self, 'GsApiDeleteInstance konnte nicht ermittelt werden.');
          FLog.Log('GsApiDeleteInstance konnte nicht ermittelt werden.');
          Result := False;
        end;
      end
      else
      begin
        FOnError(Self, 'Die Ghostscript Instanz konnte nicht erzeugt werden.');
        FLog.Log('Die Ghostscript Instanz konnte nicht erzeugt werden.');
        Result := False;
      end;
    end
    else
    begin
      FOnError(Self, Format('Die Ghostscript DLL %s wurde nicht geladen.', [QuotedStr(CurrentDLLPath)]));
      FLog.Log('Die Ghostscript DLL wurde nicht geladen.');
      Result := False;
    end;
  end
  else
  begin
    FOnError(Self, Format('Die Ghostscript DLL %s wurde nicht gefunden.', [QuotedStr(CurrentDLLPath)]));
    FLog.Log('Die Ghostscript DLL wurde nicht gefunden.');
    Result := False;
  end;
end;
  Mit Zitat antworten Zitat