<?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[component object model (COM) und Events]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich möchte eine klasse erstellen (ohne den visuellen MFC schnickschnack), die folgendes leisten soll:</p>
<p>sie soll sich bei einer COM-Klasse als EventSink registrieren und auf Events von dieser Klasse reagieren.</p>
<p>dazu habe ich folgendes gemacht:<br />
- EventSink-Klasse von IDispEventImpl abgeleitet (die Template-Parameter habe ich denke ich richitg gesetzt)<br />
- in dieser Klasse meine Event-Handler funktionen definiert und mit den SINK_MAP makros &quot;registriert&quot;<br />
- da ich ständig Compiler-Fehlermeldungen bekommen habe wegen _Module, habe ich einfach eine globale Instanz _Module von CComModule angelegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>in der funktion, die diese klasse verwendet habe ich folgendes gemacht (diese funktion wird aufgerufen wenn ich in meiner Test-App auf einen Button klicke):<br />
- CoInitialize aufgerufen<br />
- CoCreateInsance um IUnknown zu erhalten aufgerufen<br />
- Instanz von meiner EventSink Klasse angelegt<br />
- dann DispEventAdvise von der EventSink-Instanz mit dem IUnknown pointer als parameter aufgerufen</p>
<p>ich bekomme dabei keine fehlermeldungen und es läuft auch, allerdings werden die EventHandler Funktionen nicht aufgerufen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>was muss ich denn noch machen? Vielleicht ein Thread erzeugen? oder ...?<br />
bin schon langsam am verzweifeln...<br />
oder kennt ihr vielleicht ein beispiel dazu?</p>
<p>bin leider newbie in der Windows und in der COM-Programmierung...</p>
<p>danke für eure hilfe!</p>
<p>Gruß mathik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/63503/component-object-model-com-und-events</link><generator>RSS for Node</generator><lastBuildDate>Thu, 04 Jun 2026 12:24:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/63503.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Feb 2004 14:20:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to component object model (COM) und Events on Mon, 02 Feb 2004 14:20:43 GMT]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich möchte eine klasse erstellen (ohne den visuellen MFC schnickschnack), die folgendes leisten soll:</p>
<p>sie soll sich bei einer COM-Klasse als EventSink registrieren und auf Events von dieser Klasse reagieren.</p>
<p>dazu habe ich folgendes gemacht:<br />
- EventSink-Klasse von IDispEventImpl abgeleitet (die Template-Parameter habe ich denke ich richitg gesetzt)<br />
- in dieser Klasse meine Event-Handler funktionen definiert und mit den SINK_MAP makros &quot;registriert&quot;<br />
- da ich ständig Compiler-Fehlermeldungen bekommen habe wegen _Module, habe ich einfach eine globale Instanz _Module von CComModule angelegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>in der funktion, die diese klasse verwendet habe ich folgendes gemacht (diese funktion wird aufgerufen wenn ich in meiner Test-App auf einen Button klicke):<br />
- CoInitialize aufgerufen<br />
- CoCreateInsance um IUnknown zu erhalten aufgerufen<br />
- Instanz von meiner EventSink Klasse angelegt<br />
- dann DispEventAdvise von der EventSink-Instanz mit dem IUnknown pointer als parameter aufgerufen</p>
<p>ich bekomme dabei keine fehlermeldungen und es läuft auch, allerdings werden die EventHandler Funktionen nicht aufgerufen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>was muss ich denn noch machen? Vielleicht ein Thread erzeugen? oder ...?<br />
bin schon langsam am verzweifeln...<br />
oder kennt ihr vielleicht ein beispiel dazu?</p>
<p>bin leider newbie in der Windows und in der COM-Programmierung...</p>
<p>danke für eure hilfe!</p>
<p>Gruß mathik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/449655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/449655</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Mon, 02 Feb 2004 14:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to component object model (COM) und Events on Mon, 02 Feb 2004 22:03:17 GMT]]></title><description><![CDATA[<p>Gelte zwar wahrscheinlich nicht mehr als COM-Newbie, aber bei Events muß ich trotzdem meistens passen, und mit Dispatch-Events hab ich NULL Ahnung, aber ich versuch's mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<ol>
<li>
<p>Erstmal: Hau' deine CComModule-Instanz raus, und mach es richtig:<br />
Einfügen/Neues ATL-Objekt<br />
keine Angst, du wirst erstmal nur gefragt, ob du ATL-Support zu diesem MFC-Projekt hinzufügen willst. &quot;Ja klar&quot;. Dann kommt der ATL Object Wizard, der kann getrost gecancelt werden. Aber jetzt hast du offiziellen, legalen, und überhaupt nicht wieder loszuwerdenden ATL-Support<br />
Das ist aber nicht das Problem</p>
</li>
<li>
<p>Das einfachste ist wahrscheinlich (evtl. in einem testprojekt) das den Wizard machen zu lassen, und sich dann den Code anzuschauen.</p>
</li>
<li>
<p>Die ATL-Event-Helper sind darauf ausgelegt, die events von Child_Controls zu fangen - evtl. brauchst du einen Hack wie <a href="http://www.cherea.de/bitbucket/atladvsink/atladvsink.html" rel="nofollow">diesen</a></p>
</li>
<li>
<p>Wenn das alles nichts hilft, poste vielleicht mal etwas code...</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/450114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/450114</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 02 Feb 2004 22:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to component object model (COM) und Events on Tue, 03 Feb 2004 11:33:25 GMT]]></title><description><![CDATA[<p>peterchen schrieb:</p>
<blockquote>
<p>Gelte zwar wahrscheinlich nicht mehr als COM-Newbie, aber bei Events muß ich trotzdem meistens passen, und mit Dispatch-Events hab ich NULL Ahnung, aber ich versuch's mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<ol>
<li>
<p>Erstmal: Hau' deine CComModule-Instanz raus, und mach es richtig:<br />
Einfügen/Neues ATL-Objekt<br />
keine Angst, du wirst erstmal nur gefragt, ob du ATL-Support zu diesem MFC-Projekt hinzufügen willst. &quot;Ja klar&quot;. Dann kommt der ATL Object Wizard, der kann getrost gecancelt werden. Aber jetzt hast du offiziellen, legalen, und überhaupt nicht wieder loszuwerdenden ATL-Support<br />
Das ist aber nicht das Problem</p>
</li>
<li>
<p>Das einfachste ist wahrscheinlich (evtl. in einem testprojekt) das den Wizard machen zu lassen, und sich dann den Code anzuschauen.</p>
</li>
<li>
<p>Die ATL-Event-Helper sind darauf ausgelegt, die events von Child_Controls zu fangen - evtl. brauchst du einen Hack wie <a href="http://www.cherea.de/bitbucket/atladvsink/atladvsink.html" rel="nofollow">diesen</a></p>
</li>
<li>
<p>Wenn das alles nichts hilft, poste vielleicht mal etwas code...</p>
</li>
</ol>
</blockquote>
<p>danke für die tipps,</p>
<p>nachdem ich deinen tipp 1 befolgt habe läuft das jetzt... <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>
<p>mir ist allerdings nicht klar was der da alles generiert hat... ich meine brauche ich diesen ganzen generierten schnickschnack?<br />
kann ich dass denn nicht alles &quot;zu fuß&quot; machen?<br />
gibts da irgendwelche informationen dazu?</p>
<p>danke!</p>
<p>Gruß mathik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/450403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/450403</guid><dc:creator><![CDATA[mathik]]></dc:creator><pubDate>Tue, 03 Feb 2004 11:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to component object model (COM) und Events on Tue, 03 Feb 2004 15:09:39 GMT]]></title><description><![CDATA[<p>Die hauptaufgabe von _Module ist eigentlich nur:<br />
a) die HINSTANCE der anwendung zu haben, damit CString usw. weiß, wo resourcen geladen werden sollen<br />
b) die insgesamt aktiven Objekte zu zählen, damit DLL's das &quot;DllCanUnloadNow&quot; implementieren können</p>
<p>Nix davon, was mir jetzt einfällt was da zu machen ist</p>
<p>Was der Wizard generiert ist hauptsächlich:</p>
<p>- _Module.Lock() (von der ATL) ruft AfxOleLockApp() (von der MFC auf), das gleiche für Unlock.</p>
<p>- InitATL ruf CoInitializeEx (daran könnnte es liegen!) bzw CoInitialize auf, und checkt die Kommandozeile ob der server registriert/deregistriert werden soll (nur für EXE-Server)</p>
<p>(viel) mehr passiert eigentlich nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/450657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/450657</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 03 Feb 2004 15:09:39 GMT</pubDate></item></channel></rss>