![]() |
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:
instanciere ich diesen und gebe ihn mit Server := nil; frei.
Mit Server := CoMyComServer.Create;
Beim Erzeugen des Servers habe ich eine Instanz angegeben.
Delphi-Quellcode:
Jedoch erzeugt jedes Programm was diesen Server aufruft eine neue Instanz des Servers.
TTypedComObjectFactory.Create(ComServer, TMyComServer, Class_MyComServer,
ciSingleInstance, tmsingle); (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 |
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. |
Re: Out of process Comserver als single Instance
Zitat:
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 |
Re: Out of process Comserver als single Instance
So jetzt habe ich es hinbekommen.
Der Server wird mit nachfolgender Anweisung initialisiert.
Delphi-Quellcode:
tmFree erzeugt automatisch einen neuen Thread.
TTypedComObjectFactory.Create(ComServer, TMyComServer, Class_MyComServer,
ciMultiInstance , tmFree ); 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