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.exe' then 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.