Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Fehler in Komponente: Progsan Internet User Agent Components (https://www.delphipraxis.net/115548-fehler-komponente-progsan-internet-user-agent-components.html)

geskill 13. Jun 2008 20:05


Fehler in Komponente: Progsan Internet User Agent Components
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich benutze die Komponenten aus einer DLL herraus, beim Schließen vom Programm oder wenn man außerhalb der Formulare klickt wird ein Fehler erzeugt, ich bin mir definitiv sicher, dass der Fehler von diesen Komponenten erzeugt wird.

Habe die Komponente von Torry: (FreeWare)
http://www.torry.net/quicksearchd.ph...ynet&Title=Yes

Normalerweise erzeugt man ein Objekt der Klasse THTMLDecoder, durch direktes wiederfreigeben und enladen der DLL zeigt sich der Fehler, geht man eine Klasse zurück nämlich THTMLDocument passiert ähnliches, erzeugt man jedoch ein Objekt der Klasse THTMLElement entsteht kein Fehler, darauß erschließe ich, dass der Fehler in der Klasse THTMLDocument steht...

So mal die Klassen,
Code:
THTMLElement // keine Fehler
  ->THTMLDocument // Fehler
      ->THTMLDecoder // Fehler
So demnach, hat jemand das schon mal bemerkt, oder eine gute alternaive, der Source Code ist ~15000 Zeilen lang!


Weitere Infos:
Die DLL wird dynamisch geladen/entladen
Zur Übermitlung von Strings wird FastMM4 (bei ShareMem gleiches Prob.) benutzt
DLL ist bereits entladen, dann erst tritt der Fehler auf

Vielen Dank fürs druchlesen :thumb:

mkinzler 13. Jun 2008 20:08

Re: Fehler in Komponente: Progsan Internet User Agent Compon
 
Möglicherweise wird nach Entladen der Dll noch auf sie zugegriffen

geskill 13. Jun 2008 20:11

Re: Fehler in Komponente: Progsan Internet User Agent Compon
 
nein, die Komponenten sind nur innerhalb der DLL deklariert, es leigt an den Komponenten glaubt es mir :cry: :cry:

EDIT:
Hab mal die Frage:
Wie kann der Fehler eigenlich entstehen, ist ein Objekt nicht freigegeben worden, weil was anderes kann ich mir gar nicht vorstellen...

geskill 14. Jun 2008 09:09

Re: Fehler in Komponente: Progsan Internet User Agent Compon
 
So ein bischen weiter bin ich schon ich konnte den Fehler wieder auf eine kleinere Klasse eingrenzen, mehr oder weniger habe ich dies dann endlich durch probieren geschafft.

Delphi-Quellcode:
constructor THTMLDocument.Create(OwnerDocument:THTMLDocument;BelongTo:THTMLElementCollection);
begin
  inherited Create(OwnerDocument,BelongTo);
  fRawHTML:=TStringList.Create;
  fAutoLoad:=True;
  fAutoParse:=True;
  fAutoLoadFrames:=false;
  fAutoParseFrames:=false;
  fReFormatOutputHTML:=true;
  TagStr:='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.02 Transitional//EN">';

 
  fLocation        := THTMLLocation.create(self); // Diese Klasse bereitet die Probleme

  fFrameSet        := THTMLFrameSet.Create(self,childs);
  fFrameCollection := THTMLFramesCollection.Create(self);
  fFormCollection  := THTMLFormCollection.Create(self);
  fTableCollection := THTMLTableCollection.Create(self);
  fAnchorCollection := THTMLAnchorCollection.Create(self);
  fImageCollection := THTMLImageCollection.Create(self);
  fStylesCollection := THTMLStyleSheetsCollection.Create(self);
  fScriptsCollection:= THTMLScriptsCollection.Create(self);
 
end;
Delphi-Quellcode:
constructor THTMLLocation.Create(aDocument:THTMLDocument);
begin
  inherited Create;
  //fBuffer := TMemoryStream.Create;

  fSession:= TInternetSession.Create(nil);
  fSession.AccessType:=atPreConfig;
  fConnection:= TInternetConnection.Create(nil);
  fConnection.Session:=fSession;
  fLoader := TInternetHTTPRequest.Create(nil); // Diese Klasse bereitet die Probleme
  fLoader.Connection:=fConnection; // Folgefehler ...
  TInternetHTTPRequest(fLoader).opKeepConnection:=true; // Folgefehler ...

  fDocument:=aDocument;
  fLoader.OnLoaded:=doOnLoaded; // Folgefehler ...
end;

Dann habe ich mir nochmal die Destroy Metode angeschaut
Delphi-Quellcode:
destructor THTMLLocation.Destroy;
begin
  { 
  fLoader.CloseRequest;
  fLoader.Free;           <--- Aus der Klammer raus sonst jammer der weil es nicht richtig freigegeben ist
  fConnection.Disconnect;
  fConnection.free;
  fConnection:=nil;
  }
  fSession.Close;
  fSession.Free;
  fSession:=nil;
  fLoader:=nil;

  //if assigned(fBuffer) then
  //  fBuffer.Free;
  inherited Destroy;
end;
Naja und dann was das schon, also bei mir klappt es jetzt *freu* :firejump: :firejump:

Ich hätte beinahe schon aufgegeben, zumal bei 15000 Zeilen den Fehler zu finden, ohne wirklich zu wissen woran es lag ist hart!
Außerdem war dies mit die beste Komponente wenn man z.b. Internet Komponenten filtern will (Formulare, Button, EditFelder...)etc. Man hätte das auch über den IE machen können, jedoch ist der langsamer und man muss dann mit dem Ereigniss arbeiten, wenn die Seite fertig geladen wurde...

Wie gesagt, "fLoader.Free;" aus der Klammer raus, dass ganze ist zu finden in Z. ~13930


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz