AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi COM Out of Process Server mit einem oder keinem Client
Thema durchsuchen
Ansicht
Themen-Optionen

COM Out of Process Server mit einem oder keinem Client

Ein Thema von Peter1999 · begonnen am 9. Mai 2017 · letzter Beitrag vom 10. Mai 2017
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: COM Out of Process Server mit einem oder keinem Client

  Alt 9. Mai 2017, 20:01
Keine Ahnung, ob ich jetzt Blödsinn schreibe, versuche es trotzdem mal:

In Unit2 wird in initialization was gemacht, das, so wie ich das verstehe, für den Server, der als Server arbeiten soll, wesentlich ist.

Wäre es irgendwie möglich, dann, wenn der Server "nur als normales Programm" laufen soll, diesen Teil nicht auszuführen?

Bin da jetzt erstmal ganz naiv:
Delphi-Quellcode:
initialization
  if ParamCount = 0 then begin
    TAutoObjectFactory.Create(ComServer, TTestClass, Class_TestClass,
      ciSingleInstance, tmSingle);
  end;
end.
Das könnte dann gehen, wenn man den Server nur als Programm nutzen will, immer mit irgendeinem Parameter aufruft.

Weitere Alternative, wenn auch unelegant.
Es gibt von der Exe zwei Versionen, die sich nur durch den Namen unterscheiden.

Also nach dem Kompilieren wird halt eine Kopie der EXE erstellet.

Wir hätten dann z. B.

copy Server.exe Anwender.exe

In Unit2 fragen wir dann den Dateinamen ab:
Delphi-Quellcode:
initialization
  if ParamStr(0) = 'Server.exethen begin
    TAutoObjectFactory.Create(ComServer, TTestClass, Class_TestClass,
      ciSingleInstance, tmSingle);
  end;
end.
Keine Ahnung, welcher administrative Aufwand dann entsteht, um sicherzustellen, dass die Anwender dann nicht mehr Server.exe starten, sondern Anwender.exe.

Gebe ja zu: Elegant sind diese Vorschläge gewiss nicht.

Unit2 wird ja nur in Server.dpr eingebunden.

Die über einen Kompilerschalter einbinden.
Delphi-Quellcode:
{$DEFINE ComServer}
program Server;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas{Form1},
  Project1_TLB in 'Project1_TLB.pas',
{$IFDEF ComServer}
  Unit2 in 'Unit2.pas{TestClass: CoClass};
{$ENDIF}

{$R *.TLB}

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Durch Nutzung des Compilerschalters bekommt man zwei gleichnamige Exen, bei denen man dann aber sicherstellen muss, dass der Anwender nicht die falsche aufruft. Sie müssten also zumindest an unterschiedlichen Stellen liegen. Und wenn dann beide im Suchpfad liegen, gewinnt die, die zuerst gefunden wird. Auch äußerst unelegant.

Ok, irgendwie ist da alles nicht so das Wahre, aber vielleicht hilft es ja so als Idee für 'ne vernünftige Lösung.
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#2

AW: COM Out of Process Server mit einem oder keinem Client

  Alt 10. Mai 2017, 08:43
Vielen Dank, letztlich ist es doch relativ einfach zu lösen, mit genau einer Zeile Quelltext. Es reicht wirklich, wenn man beim manuellen Start des Servers die Erzeugzung des Automatisierungsobjektes verhindert. Das geht ganz einfach, da man über den Paramstr[1] mittels "-Embedding" darüber informiert wird, wenn eine Anwendung von einem COM-Client gestartet wird.

Delphi-Quellcode:
  if (ParamCount >= 1) and (ParamStr(1) = '-Embedding') then
    TAutoObjectFactory.Create(ComServer, TTestClass, Class_TestClass,
      ciSingleInstance, tmSingle);
Also nochmal danke für die Denkanstöße.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 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