![]() |
Laufzeitfehler bei Variante in DLL
Hallo,
Ich habe eine DLL welche eine weitere DLL aufruft. Ich nenne die erste DLL mal DLL1 und die andere Spaßeshalber DLL2. In der DLL2 möchte ich eine Webseite auslesen. Da dieses auf dieser Seite irgendwie nicht mit IDHTTP geht, mache ich dies mit TWebBrowser. Hier ist nun der Quellcode dazu.
Delphi-Quellcode:
Sobald ich aber den Quelltext in einen String laden möchte, bekomme ich immer einen Laufzeitfehler.
Procedure TForm2.Starten;
var ini : TIniFile; Quelltext, URL : String; vTemp : Variant; begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Config/einstellungen.ini'); Try URL := ini.ReadString('Aktuell','URL',''); ShowMessage(URL); Fertig := False; Webbrowser1.Navigate(URL); if fertig <> True then Application.ProcessMessages; vTemp := WebBrowser1.Document; Quelltext := vTemp.Body.OuterHTML; <--- hier ist ein Fehler ShowMessage(Quelltext); Finally ini.free; End; END; Interressanterweise funktioniert aber genau dashier in der DLL1 wunderbar. Aus Organisatorischen Gründen möchte ich es aber in DLL2 haben. Sobald ich die Zeile rausnehme geht auch alles nur ich habe keinen Quelltext. Was mache ich falsch ? mfg Tommy82 |
Re: Laufzeitfehler bei Variante in DLL
Nimm besser OleVariant und WideString
|
Re: Laufzeitfehler bei Variante in DLL
Der Laufzeitfehler bleibt trotzdem bestehen.
|
Re: Laufzeitfehler bei Variante in DLL
Und was für ein Fehler? Wie sieht das Interface der Dll aus?
|
Re: Laufzeitfehler bei Variante in DLL
Delphi-Quellcode:
Aufgerufen wird die DLL wie folgt:
library DLLTest2;
uses SysUtils, Classes, Unit2 in 'Unit2.pas' {Form2}; Procedure Anzeigen; var Form : TForm2; BEGIN Form2 := TForm2.Create(NIL); Form2.Starten; end; exports Anzeigen; begin end.
Delphi-Quellcode:
Als fehler bekomme ich nun : "Zugriffsverletzung bei Adresse 01E61FAB in Modul 'DLLtest2,dll'. Lesen von Adress 00000000."
Procedure TForm1.Zeige_PlugIns(Dateiname: string; Name: string);
var PlugIns:TPlugIns; Handle : THandle; BEGIN Handle := LoadLibrary(PCHAR(ExtractFilePath(ParamStr(0)) + '\PlugIns\' + Dateiname)); IF Handle <> 0 THEN BEGIN @PlugIns := GetProcAddress(Handle, PCHAR(Name)); IF @PlugIns <> NIL THEN PlugIns ELSE Showmessage('Fehler beim Laden der Datei "'+Dateiname+'"'); END; FreeLibrary(Handle); end; procedure TForm1.Button1Click(Sender: TObject); begin zeige_DLL('DLLtest2.dll','Anzeigen') end; Aber nur bei der oben genannten zeile. mfg Tommy82 |
Re: Laufzeitfehler bei Variante in DLL
Dann greifst du auf ein nicht initialisiertes Objekt zu.
Wie sieht zeige_DLL() aus? In Anzeigen deklarierst du eine Variable Form, verwendest aber Form2 Debugge die Dll doch mal. |
Re: Laufzeitfehler bei Variante in DLL
Zeige_DLL sieht genauso aus wie zeige_PlugIns, nur das der pfad nen anderer ist
Delphi-Quellcode:
Das Form2 steht bei mir da, habsch wohl ausversehen hier beim tippen vernichtet.
LoadLibrary(PCHAR(ExtractFilePath(ParamStr(0)) + '\DLLs\' + Dateiname)
Die Starten ist oben angegeben. Die soll den Quelltext auslesen. Der Debugger funzt einwandfrei. mfg Tommy82 |
Re: Laufzeitfehler bei Variante in DLL
Im Debugger kommt der fehler dann nicht?
|
Re: Laufzeitfehler bei Variante in DLL
Nein, denn es sieht so aus:
Delphi-Quellcode:
Is wohl hier beim ins Forum setzen was abhanden gekommen. Falsche Taste oder so.
Procedure Anzeigen;
var Form2 : TForm2; BEGIN Form2 := TForm2.Create(NIL); Form2.Starten; end; |
Re: Laufzeitfehler bei Variante in DLL
Welches Objekt ist denn nicht inizialisiert ? Ich finde da nix.
|
Re: Laufzeitfehler bei Variante in DLL
Setze doch ein paar Breakpoints und starte die DLL doch mal aus der IDE heraus per F8 (und dein Programm als Host-Programm definieren) und steppe durch. Da siehst du doch, wo es knallt. Schritt für Schritt rantasten ...
|
Re: Laufzeitfehler bei Variante in DLL
Delphi-Quellcode:
huhu, wie oben schon angegeben weiß ich ja wo´s knallt. nur wie behebe ich das?
if fertig <> True then Application.ProcessMessages;
vTemp := WebBrowser1.Document; Quelltext := vTemp.Body.OuterHTML; <--- hier ist ein Fehler ShowMessage(Quelltext); mfg Tommy82 |
Re: Laufzeitfehler bei Variante in DLL
Überprüfe mal, ob der Fehler beim Zugriff von vTemp, Body oder OuterHTML auftritt.
|
Re: Laufzeitfehler bei Variante in DLL
Ich nehme mal an du setzt fertig im Ereignis onDocumentComplete.
Dann muss es aber auch heißen:
Delphi-Quellcode:
Ansonsten ist WebBrowser.Document = nil und du bekommst den Fehler.
while not fertig do Application.ProcessMessages;
|
Re: Laufzeitfehler bei Variante in DLL
Huhu,
Danke das wars. mfg tommy82 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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