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)