Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Fehler bei Aufruf eines TForms mit TWebbrowser aus DLL

  Alt 6. Jan 2005, 12:05
Hallo,

wenn ich eine Unit1.pas mit einem TWebBrowser (Standard Komponente aus Internetpallette) aus einer Applikation erzeuge klappt das ohne Probleme, aus einer DLL nicht.

Unit1.pas:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
Aus einer Unit2.pas (Hauptformular) kann das Form ohne Probleme erzeugt werden.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1 := TForm1.Create(Application);
  try
    Form1.ShowModal;
  finally
    Form1.Free;
  end;
end;
Das klappt super !!!

Wenn ich nun eine DLL erzeuge:

Project1.dpr:
Delphi-Quellcode:
library Project1;

uses
  Forms,
  SysUtils,
  Classes,
  Unit1 in 'Unit1.pas{Form1};

{$R *.res}

procedure showPdf;
begin
  Form1 := TForm1.Create(Application);
  try
    Form1.ShowModal;
  finally
    Form1.Free;
  end;
end;

procedure showPdfWithApp(App: TApplication);
var
  dllApp : TApplication;
begin
  dllApp := Application;
  Application := App;
  Form1 := TForm1.Create(App);
  try
    Form1.ShowModal;
  finally
    Form1.Free;
  end;
  Application := dllApp;
end;

exports
  showPdf, showPdfWithApp;

begin
end.
und dann in einem Projekt2.exe die Funktion aufrufe gibts einen Fehler:

Unit2.pas vom Project2.dpr:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure showPdf; external 'Project1.dll';
procedure showPdfWithApp(app: TApplication); external 'Project1.dll';

procedure TForm2.Button1Click(Sender: TObject);
begin
  showPdf;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  showPdfWithApp(Application);
end;

end.
Die TWebBrowser Komponente wirft einen EOleSysError mit Meldung :
Zitat:
CoInitialize wurde nicht aufgerufen
Was ist zu tun.

Ich hatte erst den Verdacht, er will die Application der Anwendung haben, aber das half nichts.
(Bei MDI Fenstern aus der DLL war das so)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat