Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Laufzeitfehler bei Variante in DLL (https://www.delphipraxis.net/103777-laufzeitfehler-bei-variante-dll.html)

Tommy82 21. Nov 2007 16:11


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:
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;
Sobald ich aber den Quelltext in einen String laden möchte, bekomme ich immer einen Laufzeitfehler.
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

mkinzler 21. Nov 2007 16:15

Re: Laufzeitfehler bei Variante in DLL
 
Nimm besser OleVariant und WideString

Tommy82 21. Nov 2007 16:16

Re: Laufzeitfehler bei Variante in DLL
 
Der Laufzeitfehler bleibt trotzdem bestehen.

mkinzler 21. Nov 2007 16:19

Re: Laufzeitfehler bei Variante in DLL
 
Und was für ein Fehler? Wie sieht das Interface der Dll aus?

Tommy82 21. Nov 2007 16:27

Re: Laufzeitfehler bei Variante in DLL
 
Delphi-Quellcode:
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.
Aufgerufen wird die DLL wie folgt:
Delphi-Quellcode:
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;
Als fehler bekomme ich nun : "Zugriffsverletzung bei Adresse 01E61FAB in Modul 'DLLtest2,dll'. Lesen von Adress 00000000."

Aber nur bei der oben genannten zeile.

mfg

Tommy82

mkinzler 21. Nov 2007 16:41

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.

Tommy82 21. Nov 2007 16:45

Re: Laufzeitfehler bei Variante in DLL
 
Zeige_DLL sieht genauso aus wie zeige_PlugIns, nur das der pfad nen anderer ist
Delphi-Quellcode:
LoadLibrary(PCHAR(ExtractFilePath(ParamStr(0)) + '\DLLs\' + Dateiname)
Das Form2 steht bei mir da, habsch wohl ausversehen hier beim tippen vernichtet.

Die Starten ist oben angegeben. Die soll den Quelltext auslesen.

Der Debugger funzt einwandfrei.

mfg

Tommy82

mkinzler 21. Nov 2007 16:46

Re: Laufzeitfehler bei Variante in DLL
 
Im Debugger kommt der fehler dann nicht?

Tommy82 21. Nov 2007 16:51

Re: Laufzeitfehler bei Variante in DLL
 
Nein, denn es sieht so aus:

Delphi-Quellcode:
Procedure Anzeigen;
var Form2 : TForm2;
BEGIN
 Form2 := TForm2.Create(NIL);
 Form2.Starten;
end;
Is wohl hier beim ins Forum setzen was abhanden gekommen. Falsche Taste oder so.

Tommy82 21. Nov 2007 17:03

Re: Laufzeitfehler bei Variante in DLL
 
Welches Objekt ist denn nicht inizialisiert ? Ich finde da nix.

Nuclear-Ping 21. Nov 2007 17:21

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 ...

Tommy82 21. Nov 2007 19:45

Re: Laufzeitfehler bei Variante in DLL
 
Delphi-Quellcode:
   if fertig <> True then Application.ProcessMessages;
   vTemp := WebBrowser1.Document;
   Quelltext := vTemp.Body.OuterHTML; <--- hier ist ein Fehler
   ShowMessage(Quelltext);
huhu, wie oben schon angegeben weiß ich ja wo´s knallt. nur wie behebe ich das?

mfg

Tommy82

mkinzler 21. Nov 2007 19:55

Re: Laufzeitfehler bei Variante in DLL
 
Überprüfe mal, ob der Fehler beim Zugriff von vTemp, Body oder OuterHTML auftritt.

sirius 21. Nov 2007 20:01

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:
while not fertig do Application.ProcessMessages;
Ansonsten ist WebBrowser.Document = nil und du bekommst den Fehler.

Tommy82 22. Nov 2007 07:24

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