Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Out of process Comserver als single Instance (https://www.delphipraxis.net/139704-out-process-comserver-als-single-instance.html)

hanspeter 3. Sep 2009 12:02


Out of process Comserver als single Instance
 
Hallo,

ich habe ein größeres Projekt mit Exefiles modularisiert.
Ein Hauptprogramm ruft, je nach Menüpunkt, eine Exe mit Kommandozeilen Parametern auf.
Das funktioniert zwar, hat jedoch zur Folge das bestimmte Module z.B. der Reportgenerator in jeder Exe eingebunden sind.
Ich habe deshalb die Reports in ein Out of Process-Server ausgelagert.

Delphi-Quellcode:
Mit Server := CoMyComServer.Create;
instanciere ich diesen und gebe ihn mit Server := nil; frei.

Beim Erzeugen des Servers habe ich eine Instanz angegeben.

Delphi-Quellcode:
 TTypedComObjectFactory.Create(ComServer, TMyComServer, Class_MyComServer,
    ciSingleInstance, tmsingle);
Jedoch erzeugt jedes Programm was diesen Server aufruft eine neue Instanz des Servers.
(Mehrfach in der Taskleiste vorhanden.)

Kann mir wer auf die Sprünge helfen, was ich ändern muss, damit immer die gleiche Instanz verwendet wird?
Oder mache ich einen Denkfehler, wenn der Report von mehreren Programmen verwendet wird?


Gruß
Peter

Uwe Raabe 3. Sep 2009 17:09

Re: Out of process Comserver als single Instance
 
"SingleInstance" bedeutet, daß der COM-Server nur einen einzelnen Client bedient. Gibt es mehrere Clients, wird für jeden ein eigener COM-Server erstellt. Du erreichst mit dieser Einstellung daher genau das Gegenteil von dem, was du willst.

Bei einem Multi-Instance-Server musst du allerdings selbst dafür sorgen, daß er auch in der Lage ist, mehrere Clients unabhängig voneinander zu bedienen.

hanspeter 4. Sep 2009 06:54

Re: Out of process Comserver als single Instance
 
Zitat:

Zitat von Uwe Raabe
"SingleInstance" bedeutet, daß der COM-Server nur einen einzelnen Client bedient. Gibt es mehrere Clients, wird für jeden ein eigener COM-Server erstellt. Du erreichst mit dieser Einstellung daher genau das Gegenteil von dem, was du willst.

Ups da habe ich die Dokumentation wohl falsch interpretiert.
Ein Programm meldet einen Druckauftrag an, dieser wird in einer Warteschlange eingereiht.
Den Registerteil für den Auftrag habe ich als kritischen Prozess markiert. Das sollte zur Synchronisation reichen?

Ich habe inzwischen mit der Com-Technologie eigentlich recht positive Erfahrungen gemacht.
Im Moment bin ich am Überlegen, ob ich meine Modularisierung per Exe-Files nicht auf Com-Server umstelle.
Das sollte wohl etwas flexibler sein.


Mit Gruß
Peter

hanspeter 4. Sep 2009 10:55

Re: Out of process Comserver als single Instance
 
So jetzt habe ich es hinbekommen.

Der Server wird mit nachfolgender Anweisung initialisiert.

Delphi-Quellcode:
 TTypedComObjectFactory.Create(ComServer, TMyComServer, Class_MyComServer,
    ciMultiInstance   , tmFree   );
tmFree erzeugt automatisch einen neuen Thread.
Das Teil verhält sich wunschgemäß.
Beim Starten des ersten Client wird eine Instanz erzeugt.
Beim Starten weiterer Clients ist nur eine Instanz vorhanden.
Mit dem Schließen des letzten Client, wird der Server geschlossen.

Gruß Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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