Thema: Delphi Fehlerbehandlung bei dll

Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fehlerbehandlung bei dll

  Alt 6. Aug 2021, 18:00
@Sebastian
Das ist ja sehr interessant, dass das bei Dir funktioniert! Du sprichst von einem try/except: Hast Du den Aufruf im Host nochmal in ein try except gepackt?

Sehr dankbar bin ich Dir für den Hinweis auf das aktuelle Indy. Ich hatte da gar nicht mehr nachgesehen, weil ich vor einiger Zeit schon mal gelesen hatte, dass Indy nur bis zur Version 10.2 oder sowas mit D6 kompatibel ist. scheinbar unterstützt diese Version aber nur die Protokolle TLS 1.0 und 1.1, die aber von der gewünschten Internetseite nicht mehr akzeptiert werden. Ich hatte daher immer eine "reset by peer" Fehlermeldung bekommen. Ich werds jetzt aber gleich nochmal mit dem aktuellen Indy probieren, das ist mir eh lieber als das Rumgefrickel mit dlls.

@Günther
Ich habe im gesamten restlichen Code kein try/except, weil da eigentlich nichts mehr schief gehen kann. Das einzige try (/ finally) hatte ich oben schon gepostet. Ist Deine Anmerkung so zu verstehen, dass ich besser mit einem try/except (anstelle try/finally) arbeiten sollte, damit die Exception die dll nicht verlässt? (In diese Richtung scheint mir auch der Hinweis von himitsu zu gehen, wobei die Ausführungen für mich aber starker Tobak sind und weit über meinen Hobby-Programmier-Horizont hinausgehen....).
Delphi-Quellcode:
library internet;

uses
  System.SysUtils,
  System.Classes,
  System.Net.URLClient,
  System.Net.HttpClient,
  System.Net.HttpClientComponent;

{$R *.res}

function get_course(url: ShortString): shortstring; stdcall;
var
  HttpClient: THttpClient;
  HttpResponse: IHttpResponse;
 begin
  Result := '';

  HttpClient := THTTPClient.Create;
  try
    try
      HttpResponse := HttpClient.Get(url);
    except
      // hier irgendwas machen, was du willst z.B. je anch Exeption etwas anderes (Siehe Hilfe zu try except).
      vtext := '';
    end;
    if vtext <> 'then
      vtext := HttpResponse.ContentAsString();
  finally
    HttpClient.Free;
  end;

{es folgt eine längere Auswertung des Seitenquelltextes, der Kurs wird dann ins Result geschrieben. Hier liegt nicht das Problem}  
  end;

exports
  get_course;
begin
end.
  Mit Zitat antworten Zitat