<?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[COM Exe server asynchron aufrufen ??]]></title><description><![CDATA[<p>Hi,</p>
<p>gibt es eine Möglichkeit einen COM Exe Server asynchron aufzurufen ??<br />
Bei mir blockiert der Client, bis der server fertig ist.</p>
<p>Und wenn ja, was passiert dann mit den Rückgabewerten ??</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323431/com-exe-server-asynchron-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 02:43:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323431.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Jan 2014 16:47:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to COM Exe server asynchron aufrufen ?? on Wed, 29 Jan 2014 16:47:29 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>gibt es eine Möglichkeit einen COM Exe Server asynchron aufzurufen ??<br />
Bei mir blockiert der Client, bis der server fertig ist.</p>
<p>Und wenn ja, was passiert dann mit den Rückgabewerten ??</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2380465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2380465</guid><dc:creator><![CDATA[NasenBaer_2013]]></dc:creator><pubDate>Wed, 29 Jan 2014 16:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to COM Exe server asynchron aufrufen ?? on Thu, 30 Jan 2014 02:24:45 GMT]]></title><description><![CDATA[<p>NasenBaer_2013 schrieb:</p>
<blockquote>
<p>gibt es eine Möglichkeit einen COM Exe Server asynchron aufzurufen ??</p>
</blockquote>
<p>Du hast diesbezüglich bei COM/COM+/DCOM die selben Möglichkeiten die du auch hast wenn du mit einem &quot;normalen&quot; Objekt arbeitest.</p>
<p>D.h.:</p>
<ol>
<li>
<p>Mach BeginFoo/EndFoo Funktionen, die du verwenden kannst um Dinge asynchron zu erledigen. Dazu musst du natürlich Kontrolle über das Interface des Objekts haben. In diesem Fall über das vom COM Server implementierte Interface.</p>
</li>
<li>
<p>Ruf die Funktion in nem eigenen Thread auf. Bei COM musst du dabei auf die Apartments achten. D.h. du musst sicherstellen dass der Interface Zeiger in dem Thread verwendet werden darf in dem du Funktionen aufrufen willst.<br />
Das Thema ist aber dummerweise etwas zu komplex um es in ein paar Sätzen zu erklären.<br />
Und natürlich muss das COM Objekt Thread-safe sein, falls du es währenddessen noch mit weiteren Aufrufen quälen willst.</p>
</li>
</ol>
<blockquote>
<p>Bei mir blockiert der Client, bis der server fertig ist.</p>
</blockquote>
<p>Ja. Und wieso wundert dich das? Ist doch bei anderen Aufrufen auch so!?!</p>
<blockquote>
<p>Und wenn ja, was passiert dann mit den Rückgabewerten ??</p>
</blockquote>
<p>Ich hoffe die Frage kannst du dir jetzt selbst beantworten.</p>
<p>----</p>
<p>Falls es eine weitere, COM-spezifische, Möglichkeit geben sollte, bitte ich um Ergänzung. Ich kenne zumindest keine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2380530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2380530</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 30 Jan 2014 02:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to COM Exe server asynchron aufrufen ?? on Thu, 30 Jan 2014 12:06:19 GMT]]></title><description><![CDATA[<p>Hi hustbaer ,</p>
<p>also bei meinem Exe server ist irgendwo ein fehler.<br />
Und zwar ruft der client</p>
<pre><code>CoGetClassObject(CLSID_Hello,CLSCTX_SERVER,NULL,IID_IClassFactory,(void **)&amp;pCF);
</code></pre>
<p>Das geht erstmal gut und ich bekomme einen pointer auf die factory zurück.<br />
Ich teste den Rückgabewert auf S_OK und pCF gegen 0x00000000.</p>
<p>Dann mache ich ein</p>
<pre><code>pCF-&gt;CreateInstance(NULL,IID_Hello,(void **)&amp;pHello);
</code></pre>
<p>Leider ist pHello immer Null, und der Rückgabewert ist<br />
2147746133 = 0x80040155 = REGDB_E_IIDNOTREG womit ich nix anfangen kann.</p>
<p>Wenn ich im Server std::cout ausgaben mache, werden die funktionen<br />
CoHelloFactory::QueryInterface<br />
CoHelloFactory::CreateInstance<br />
CoHello::QueryInterface<br />
aufgerufen...</p>
<p>In meiner Registry habe ich einträge unter<br />
HKEY_CLASSES_ROOT\Hello.exe\CLSID=&lt;CLSID&gt;<br />
HKEY_CLASSES_ROOT\CLSID\&lt;CLSID&gt; = main_server.exe<br />
HKEY_CLASSES_ROOT\CLSID\&lt;CLSID&gt;\LocalServer32 = &lt;Pfad zu main_server.exe&gt;<br />
HKEY_CLASSES_ROOT\Wow6432Node\CLSID = &lt;CLSID&gt;<br />
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\&lt;CLSID&gt; = main_server.exe<br />
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\&lt;CLSID&gt;\LovalServer32 = &lt;Pfad zu main_server.exe&gt;</p>
<p>Muss ich die IID auch noch registrieren ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2380586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2380586</guid><dc:creator><![CDATA[NasenBaer_2013]]></dc:creator><pubDate>Thu, 30 Jan 2014 12:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to COM Exe server asynchron aufrufen ?? on Thu, 30 Jan 2014 14:33:40 GMT]]></title><description><![CDATA[<p>Hmm okay ich glaube mir fehlt das Marshallen....</p>
<p>Wie kann man denn mit MinGw ein Oleaut32.dll marshalling auf einem Windows 7 64 Bit aufsetzen ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2380600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2380600</guid><dc:creator><![CDATA[NasenBaer_2013]]></dc:creator><pubDate>Thu, 30 Jan 2014 14:33:40 GMT</pubDate></item></channel></rss>