<?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[Event einer (unbekannten) COM Componente in einem Client abfangen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine ActiveX-Componente erstellt, die mir eine zur &quot;DesignTime&quot; unbekannte Componente wrappen soll. Diese unbekannte Componente muss nach einem bestimmten Standard programmiert worden sein. So weiss ich von den implementierten Methoden und Properties die Namen und kann nach ihnen suchen und sie auch aufrufen.<br />
Ich bin soweit gekommen, das ich also eine Instance der Componente bilden kann und auch die Methoden kann ich aufrufen.<br />
Das Problem ist nun, dass auch ein bestimmter Event abgefangen werden muss. Ich weiss allerdings nur den Namen dieses Events. Die Eventid muss nicht immer gleich sein(der Standard schreibt dies nicht vor).<br />
Ich kann ihn also nicht mit einer &quot;EVENTSINK_MAP&quot; auffangen, da ich dort vor dem compilieren die Eventid angeben muss und diese nicht zur Laufzeit verändern kann(hab ich jedenfalls so probiert und bin der Meinung das dies nicht geht).<br />
Es gibt nun ja auch noch die Möglichkeit den Event über den IConnectionpoincontainer abzufangen, allerding brauch ich dazu (soweit ich das weiss) eine CSink-class in meinem Client. Die Classe benötigt aber das Includieren einer Header-Datei und einer TYPLIB-Datei, die ich aber nicht habe. Ich kann nur den Pfad der unbekannten Componente abfragen und damit die TypLib laden.<br />
Ich finde aber einen Connectionpoint mit FindConnectionPoint , nur weiss ich jetzt nicht weiter, da ich so eine CSink-classe nicht habe und auch nicht entsprechend anlegen kann.<br />
Gibt es da andere Möglichkeiten. Über jeden Ansatz der mich weiter bringt , würde ich mich freuen.</p>
<p>MfG masanne</p>
<pre><code>//...

			// create Instance 
			bStat= m_ControlWrapper.CreateControl(clsid, &quot;Spectrometer&quot;, WS_CHILD, rct, this, my_IDC, NULL, FALSE, NULL);

			// Use the IUnknown of the control.
			pUnk = m_ControlWrapper.GetControlUnknown();

			// From there get the IDispatch interface of control.
			pUnk-&gt;QueryInterface(IID_IDispatch, (LPVOID*)&amp;pInterface);

//...

//...

			// loading of the TypLib 
			hRes = LoadTypeLib(szPath, &amp;pITypeLib);

			// specified type description in the library
					hRes = pITypeLib-&gt;GetTypeInfo(i,&amp;m_pITypeInfo);

//...

//...

					IConnectionPointContainer  * pCPC;
					hRes = pInterface-&gt;QueryInterface(IID_IConnectionPointContainer,(void**) &amp;pCPC);

					TYPEATTR * ppTypeAttr;
					hRes = m_pITypeInfo-&gt;GetTypeAttr(&amp;ppTypeAttr);

					// IID of the Event interface
					GUID guid = ppTypeAttr-&gt;guid;

					IConnectionPoint * pCP;
					hRes = pCPC-&gt;FindConnectionPoint(guid,&amp;pCP);

...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/154989/event-einer-unbekannten-com-componente-in-einem-client-abfangen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 22:14:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154989.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Aug 2006 14:58:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Event einer (unbekannten) COM Componente in einem Client abfangen on Tue, 01 Aug 2006 14:58:33 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine ActiveX-Componente erstellt, die mir eine zur &quot;DesignTime&quot; unbekannte Componente wrappen soll. Diese unbekannte Componente muss nach einem bestimmten Standard programmiert worden sein. So weiss ich von den implementierten Methoden und Properties die Namen und kann nach ihnen suchen und sie auch aufrufen.<br />
Ich bin soweit gekommen, das ich also eine Instance der Componente bilden kann und auch die Methoden kann ich aufrufen.<br />
Das Problem ist nun, dass auch ein bestimmter Event abgefangen werden muss. Ich weiss allerdings nur den Namen dieses Events. Die Eventid muss nicht immer gleich sein(der Standard schreibt dies nicht vor).<br />
Ich kann ihn also nicht mit einer &quot;EVENTSINK_MAP&quot; auffangen, da ich dort vor dem compilieren die Eventid angeben muss und diese nicht zur Laufzeit verändern kann(hab ich jedenfalls so probiert und bin der Meinung das dies nicht geht).<br />
Es gibt nun ja auch noch die Möglichkeit den Event über den IConnectionpoincontainer abzufangen, allerding brauch ich dazu (soweit ich das weiss) eine CSink-class in meinem Client. Die Classe benötigt aber das Includieren einer Header-Datei und einer TYPLIB-Datei, die ich aber nicht habe. Ich kann nur den Pfad der unbekannten Componente abfragen und damit die TypLib laden.<br />
Ich finde aber einen Connectionpoint mit FindConnectionPoint , nur weiss ich jetzt nicht weiter, da ich so eine CSink-classe nicht habe und auch nicht entsprechend anlegen kann.<br />
Gibt es da andere Möglichkeiten. Über jeden Ansatz der mich weiter bringt , würde ich mich freuen.</p>
<p>MfG masanne</p>
<pre><code>//...

			// create Instance 
			bStat= m_ControlWrapper.CreateControl(clsid, &quot;Spectrometer&quot;, WS_CHILD, rct, this, my_IDC, NULL, FALSE, NULL);

			// Use the IUnknown of the control.
			pUnk = m_ControlWrapper.GetControlUnknown();

			// From there get the IDispatch interface of control.
			pUnk-&gt;QueryInterface(IID_IDispatch, (LPVOID*)&amp;pInterface);

//...

//...

			// loading of the TypLib 
			hRes = LoadTypeLib(szPath, &amp;pITypeLib);

			// specified type description in the library
					hRes = pITypeLib-&gt;GetTypeInfo(i,&amp;m_pITypeInfo);

//...

//...

					IConnectionPointContainer  * pCPC;
					hRes = pInterface-&gt;QueryInterface(IID_IConnectionPointContainer,(void**) &amp;pCPC);

					TYPEATTR * ppTypeAttr;
					hRes = m_pITypeInfo-&gt;GetTypeAttr(&amp;ppTypeAttr);

					// IID of the Event interface
					GUID guid = ppTypeAttr-&gt;guid;

					IConnectionPoint * pCP;
					hRes = pCPC-&gt;FindConnectionPoint(guid,&amp;pCP);

...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1108630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108630</guid><dc:creator><![CDATA[masanne]]></dc:creator><pubDate>Tue, 01 Aug 2006 14:58:33 GMT</pubDate></item></channel></rss>