![]() |
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) ![]() 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:
So demnach, hat jemand das schon mal bemerkt, oder eine gute alternaive, der Source Code ist ~15000 Zeilen lang!
THTMLElement // keine Fehler
->THTMLDocument // Fehler ->THTMLDecoder // Fehler 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: |
Re: Fehler in Komponente: Progsan Internet User Agent Compon
Möglicherweise wird nach Entladen der Dll noch auf sie zugegriffen
|
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... |
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:
Naja und dann was das schon, also bei mir klappt es jetzt *freu* :firejump: :firejump:
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; 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 00:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz