<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Programm, welches zur Laufzeit bestimmte Services anbietet?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein Programm implementieren, welches zur Laufzeit bestimmte Services anbietet, die von einem oder mehreren Client-Programmen auf dem selben Rechner benutzt werden können.<br />
Mit einem COM-Server lässt sich das ja scheinbar wunderbar lösen, allerdings bekommt dabei jedes Clientprogramm jedes Mal eine neue Instanz des Servers.<br />
Ich möchte den Server jedoch a) manuell starten (.exe) und beenden können und es soll b) auch nur genau eine Instanz im Speicher geben, sodass Änderungen, die Client 1 z.B. an einer Membervariable des Servers vornimmt, von Client 2 gesehen werden können.</p>
<p>Wie mach ich das am besten??</p>
<p>MfG, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149289/programm-welches-zur-laufzeit-bestimmte-services-anbietet</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 04:35:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149289.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Jun 2006 14:45:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 14:45:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein Programm implementieren, welches zur Laufzeit bestimmte Services anbietet, die von einem oder mehreren Client-Programmen auf dem selben Rechner benutzt werden können.<br />
Mit einem COM-Server lässt sich das ja scheinbar wunderbar lösen, allerdings bekommt dabei jedes Clientprogramm jedes Mal eine neue Instanz des Servers.<br />
Ich möchte den Server jedoch a) manuell starten (.exe) und beenden können und es soll b) auch nur genau eine Instanz im Speicher geben, sodass Änderungen, die Client 1 z.B. an einer Membervariable des Servers vornimmt, von Client 2 gesehen werden können.</p>
<p>Wie mach ich das am besten??</p>
<p>MfG, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071196</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Sun, 04 Jun 2006 14:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 15:25:55 GMT]]></title><description><![CDATA[<p>Kuck dir das mit DCOM nochmal genauer an.<br />
<a href="https://duckduckgo.com/?q=isbn+3860634593&amp;cppnetbooks" rel="nofollow">Inside Distributed COM | ISBN: 3860634593</a></p>
<p>b) ist auf jeden Fall lösbar<br />
a) wenn der Server gebraucht wird, wird er halt durch den Client gestartet,<br />
wo liegt dein Problem ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071223</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Sun, 04 Jun 2006 15:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 15:29:08 GMT]]></title><description><![CDATA[<p>Out-Proc COM-Server gibt es nur einen für jeden Benutzer.<br />
Wenn Du nur *einen* im System haben willst, kannst Du den COM-Server als Service laufen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071225</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 04 Jun 2006 15:29:08 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 16:48:44 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Redhead schrieb:</p>
<blockquote>
<p>a) wenn der Server gebraucht wird, wird er halt durch den Client gestartet,<br />
wo liegt dein Problem ?</p>
</blockquote>
<p>Das Problem ist, dass der Client am Ende per Release() den Server beendet. Kommt der nächste Client, wird ein neuer Serverprozess gestartet, aber die alten Daten sind weg.</p>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Wenn Du nur *einen* im System haben willst, kannst Du den COM-Server als Service laufen lassen.</p>
</blockquote>
<p>Was bedeutet das genau, &quot;als Service laufen lassen&quot;?</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071265</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Sun, 04 Jun 2006 16:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 17:07:35 GMT]]></title><description><![CDATA[<p>Thomas++ schrieb:</p>
<blockquote>
<p>Das Problem ist, dass der Client am Ende per Release() den Server beendet. Kommt der nächste Client, wird ein neuer Serverprozess gestartet, aber die alten Daten sind weg.</p>
</blockquote>
<p>Du brauchst doch den Server nicht beenden. Lass ihn doch einfach weiterlaufen...</p>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Wenn Du nur *einen* im System haben willst, kannst Du den COM-Server als Service laufen lassen.</p>
</blockquote>
<p>Was bedeutet das genau, &quot;als Service laufen lassen&quot;?[/quote]AFAIK kannst Du beim Wizard angeben, was für eine Art von Server Du haben willst. Und da kann man auch Service auswählen. Der läuft dann unter einem bestimmten Benutzer-Account und läuft auch, wenn niemand angemeldet ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071269</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 04 Jun 2006 17:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 17:13:43 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Thomas++ schrieb:</p>
<blockquote>
<p>Das Problem ist, dass der Client am Ende per Release() den Server beendet. Kommt der nächste Client, wird ein neuer Serverprozess gestartet, aber die alten Daten sind weg.</p>
</blockquote>
<p>Du brauchst doch den Server nicht beenden. Lass ihn doch einfach weiterlaufen...</p>
</blockquote>
<p>Dann bekommt der nächste Client per CoCreateInstance() aber trotzdem eine neue Instanz des Servers. Und die alte Instanz wartet vergeblich auf Beendigung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071272</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Sun, 04 Jun 2006 17:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 17:22:35 GMT]]></title><description><![CDATA[<p>Ich hoff ja mal das die Daten um die es dir geht nicht nur im Hauptspeicher<br />
liegen sondern &quot;ordentlich&quot; gespeichert werden, z.B. in einer Datenbank.<br />
In diesem Fall sollte sich dein Problem wohl von selbst erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071276</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Sun, 04 Jun 2006 17:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Sun, 04 Jun 2006 17:40:36 GMT]]></title><description><![CDATA[<p>Thomas++ schrieb:</p>
<blockquote>
<p>Dann bekommt der nächste Client per CoCreateInstance() aber trotzdem eine neue Instanz des Servers. Und die alte Instanz wartet vergeblich auf Beendigung.</p>
</blockquote>
<p>Nein, warum? Du darfst halt nie &quot;Revoke&quot; aufrufen!<br />
Bei ATL musst Du AFAIK eine bestimmte Methode derm MainApp überladen, dann wird das beendet verhindert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071285</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 04 Jun 2006 17:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Tue, 06 Jun 2006 08:47:31 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Thomas++ schrieb:</p>
<blockquote>
<p>Dann bekommt der nächste Client per CoCreateInstance() aber trotzdem eine neue Instanz des Servers. Und die alte Instanz wartet vergeblich auf Beendigung.</p>
</blockquote>
<p>Nein, warum? Du darfst halt nie &quot;Revoke&quot; aufrufen!<br />
Bei ATL musst Du AFAIK eine bestimmte Methode derm MainApp überladen, dann wird das beendet verhindert.</p>
</blockquote>
<p>Ok, ich wühl mich gerade durch diverse Beispiele.</p>
<p>Klar scheint mir inzwischen: Wenn, dann geht es nur mit einem lokalen Exe-Server , mit einer Inproc-DLL gehts wohl nicht.<br />
Hier gibts Beispiele von Microsoft, leider mit sehr spärlicher Dokumentation: <a href="http://support.microsoft.com/?scid=kb%3Ben-us%3B291389&amp;x=12&amp;y=11" rel="nofollow">http://support.microsoft.com/?scid=kb%3Ben-us%3B291389&amp;x=12&amp;y=11</a></p>
<p>Übrigens hat der per ATL-Wizard erstellte Server diese einfache &quot;Lebensroutine&quot;:</p>
<pre><code class="language-cpp">hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE);
_ASSERTE(SUCCEEDED(hRes));

MSG msg;
while (GetMessage(&amp;msg, NULL, 0, 0))
	DispatchMessage(&amp;msg);

_Module.RevokeClassObjects();
</code></pre>
<p>Wahrscheinlich muss ich da was Grundlegendes ändern, dennn hier wird ja tatsächlich das Revoke aufgerufen, sobald die WM_QUIT-Message eines Clients eintrifft.</p>
<p>Gruß, Thomas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072228</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Tue, 06 Jun 2006 08:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Programm, welches zur Laufzeit bestimmte Services anbietet? on Tue, 06 Jun 2006 10:15:45 GMT]]></title><description><![CDATA[<p>Du darfst das WM_QUIT natürlich gar nicht erst zulassen... Das kannst Du irgendwo im Release Deines COM-Objektes ändern (muesste jetzt aber auch erst mal nachschauen...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072327</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 06 Jun 2006 10:15:45 GMT</pubDate></item></channel></rss>