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 ActiveX-DLL oder ActiveX-Exe? (https://www.delphipraxis.net/46844-activex-dll-oder-activex-exe.html)

tgoessi 1. Jun 2005 15:23


ActiveX-DLL oder ActiveX-Exe?
 
Hallo Zusammen

Ich habe folgendes Problem:

Aus einer unserer Anwendung heraus muss ich Informationen einer Fremdapplikation über ActiveX zur Verfügung stellen. Unsere Anwendung soll aber aus kompatibilitätsgründen kein ActiveX-Interface zur Verfügung stellen.

Deshalb wähle ich einen COM-Server, der als Interface fungiert und über die ActiveX-Schnittstellen verfügt. Unsere Anwendung schreibt die Information via ActiveX in den COM-Server, welcher diese dann der Fremdapplikation auch über AktiveX zur Verfügung stellt.

Diese Variante hat ausserdem den Vorteil, dass unsere Anwendung nicht von der Fremdapplikation gestartet werden kann (was in unserem Fall ein Problem darstellen würde). Es wird dann der COM-Server als Interface gestartet.

Durch den Datenaustausch im Interface darf dazu nur eine Instanz des COM-Servers gestartet werden, damit die Daten, die über das ActiveX-Input-Schnittstelle geladen werden von der anderen Seite auch wieder über die ActiveX-Output-Schnittstelle sichtbar sind.

Nun kommt die eigentliche Frage:
Kann ich eine ActiveX-DLL für das Interface verwenden (einfachere Registrierung) oder muss ich eine ActiveX-EXE definieren?
Welches ClassInstancing muss ich verwenden cSingleInstance oder cMultiInstance?

Danke für Eure Tips
Tom

barf00s 1. Jun 2005 15:33

Re: ActiveX-DLL oder ActiveX-Exe?
 
deine frage hast dir quasi grad selbst beantwortet...
jedenfalls den einen teil :)

Zitat:

Kann ich eine ActiveX-DLL für das Interface verwenden (einfachere Registrierung) oder muss ich eine ActiveX-EXE definieren?
kannst du, musst du nicht.


Zitat:

Welches ClassInstancing muss ich verwenden cSingleInstance oder cMultiInstance?
Zitat:

Durch den Datenaustausch im Interface darf dazu nur eine Instanz des COM-Servers gestartet werden, damit die Daten, die über das ActiveX-Input-Schnittstelle geladen werden von der anderen Seite auch wieder über die ActiveX-Output-Schnittstelle sichtbar sind.

tgoessi 1. Jun 2005 16:17

Re: ActiveX-DLL oder ActiveX-Exe?
 
Das funktioniert jetzt aber bei mir nicht wie gewünscht.
Wenn ich ciSingleInstance wähle, erhalte ich die Daten nicht wie gewünscht über die DLL.
Bei einer ActiveX-Exe wird eine zweite Instanz gestartet.

Die Instanzierung ist wie folgt:
Delphi-Quellcode:
  TAutoObjectFactory.Create(ComServer, TInterfaceData, Class_InterfaceData,
    ciSingleInstance, tmApartment);
Ist da was falsch?

Tom

shmia 1. Jun 2005 17:58

Re: ActiveX-DLL oder ActiveX-Exe?
 
Zitat:

Zitat von tgoessi
Aus einer unserer Anwendung heraus muss ich Informationen einer Fremdapplikation über ActiveX zur Verfügung stellen. Unsere Anwendung soll aber aus kompatibilitätsgründen kein ActiveX-Interface zur Verfügung stellen.

Das verstehe ich nicht so ganz, aber man kann eine Anwendung mit Automatisierungsschnittstelle so bauen,
dass keine Benutzeroberfläche sichtbar wird, wenn die Anwendung über COM angestartet wurde:
Delphi-Quellcode:
begin
  Application.Initialize;
  if (Pos('Embedding', ParamStr(1)) <> 0) then
  begin
     Application.ShowMainForm := False;
  end;
  Application.Title := 'AppTitle';
  Application.CreateForm(TFrmMain, FrmMain);
  Application.Run;
end.

tgoessi 2. Jun 2005 09:16

Re: ActiveX-DLL oder ActiveX-Exe?
 
Die Anwendung darf nicht von der ActiveX gestartet werden, da sie von einer Host-Anwendung mit Parametern gestartet werden muss, sonst funktioniert es nicht richtig.
Deshalb der COM-Server als Interfaceobjekt.

Zitat:

Zitat von shmia
Zitat:

Zitat von tgoessi
Aus einer unserer Anwendung heraus muss ich Informationen einer Fremdapplikation über ActiveX zur Verfügung stellen. Unsere Anwendung soll aber aus kompatibilitätsgründen kein ActiveX-Interface zur Verfügung stellen.

Das verstehe ich nicht so ganz, aber man kann eine Anwendung mit Automatisierungsschnittstelle so bauen,
dass keine Benutzeroberfläche sichtbar wird, wenn die Anwendung über COM angestartet wurde:
Delphi-Quellcode:
begin
  Application.Initialize;
  if (Pos('Embedding', ParamStr(1)) <> 0) then
  begin
     Application.ShowMainForm := False;
  end;
  Application.Title := 'AppTitle';
  Application.CreateForm(TFrmMain, FrmMain);
  Application.Run;
end.


tgoessi 3. Jun 2005 09:29

Re: ActiveX-DLL oder ActiveX-Exe?
 
Ich habe nun einige Tests gemacht. Mit einer ActiveX-DLL funktioniert es definitiv nicht, ich muss eine ActiveX-Exe verwenden.
Offenbar läuft die DLL im Speicherraum des aufrufenden Prozesses, daher kann man nicht von zwei unterschiedlichen Prozessen auf dieselbe DLL zugreifen. Es werden in jedem Fall zwei Instanzen mit unterschiedlichem Adressraum gestartet.

Das zur Info
Tom

Zitat:

Zitat von shmia
Zitat:

Zitat von tgoessi
Aus einer unserer Anwendung heraus muss ich Informationen einer Fremdapplikation über ActiveX zur Verfügung stellen. Unsere Anwendung soll aber aus kompatibilitätsgründen kein ActiveX-Interface zur Verfügung stellen.

Das verstehe ich nicht so ganz, aber man kann eine Anwendung mit Automatisierungsschnittstelle so bauen,
dass keine Benutzeroberfläche sichtbar wird, wenn die Anwendung über COM angestartet wurde:
Delphi-Quellcode:
begin
  Application.Initialize;
  if (Pos('Embedding', ParamStr(1)) <> 0) then
  begin
     Application.ShowMainForm := False;
  end;
  Application.Title := 'AppTitle';
  Application.CreateForm(TFrmMain, FrmMain);
  Application.Run;
end.

[/quote]


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz