<?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 Vererbung]]></title><description><![CDATA[<p>Hallo,<br />
ich weiß nicht genau, in welchem Bereich ich das hier posten sollte, WinAPI ist es ja nicht so ganz, vielleicht eher Visual C++, aber da es sich um ATL/COM mit C++ handelt, dachte ich, könnte ich auch hier richtig sein.<br />
Ich habe eine Frage:<br />
Ist es möglich von eigens definierten Interfaces (welche eventuell sogar von IDispatch z.B. erben) zu erben? Also so was wie</p>
<pre><code class="language-cpp">interface IMyBase: IDispatch{
//...
};

interface IMyDerived: IMyBase{
//...
};
</code></pre>
<p>Weil irgendwie macht das ganze mir Probleme, da ich von MIDL.exe immer den Error erhalte, dass das LayOut von IMyDerived so nicht dargestellt werden kann.<br />
Das ganze wär echt wichtig für mich, da IMyBase auch des öfteren geerbt werden müsste, ansonsten müsste ich in den Klassen, welche die entsprechenden Interfaces implementieren auch jeweils IMyBase implementieren und das Ganze könnte unter Umständen ein paar kleinere Probleme, v.a. in der Benutzung aufwerfen. Wäre echt cool, wenn einer hier Ahnung davon hätte und mir weiterhelfen könnte. Bin in COM auch selbst noch nicht so fit, bzw. benutze es (beruflich) fast ausschließlich als C++-Wrapper, da COM in meiner Firma vorgeschrieben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198314/com-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 03:00:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198314.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Nov 2007 15:56:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to COM Vererbung on Tue, 20 Nov 2007 15:56:24 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich weiß nicht genau, in welchem Bereich ich das hier posten sollte, WinAPI ist es ja nicht so ganz, vielleicht eher Visual C++, aber da es sich um ATL/COM mit C++ handelt, dachte ich, könnte ich auch hier richtig sein.<br />
Ich habe eine Frage:<br />
Ist es möglich von eigens definierten Interfaces (welche eventuell sogar von IDispatch z.B. erben) zu erben? Also so was wie</p>
<pre><code class="language-cpp">interface IMyBase: IDispatch{
//...
};

interface IMyDerived: IMyBase{
//...
};
</code></pre>
<p>Weil irgendwie macht das ganze mir Probleme, da ich von MIDL.exe immer den Error erhalte, dass das LayOut von IMyDerived so nicht dargestellt werden kann.<br />
Das ganze wär echt wichtig für mich, da IMyBase auch des öfteren geerbt werden müsste, ansonsten müsste ich in den Klassen, welche die entsprechenden Interfaces implementieren auch jeweils IMyBase implementieren und das Ganze könnte unter Umständen ein paar kleinere Probleme, v.a. in der Benutzung aufwerfen. Wäre echt cool, wenn einer hier Ahnung davon hätte und mir weiterhelfen könnte. Bin in COM auch selbst noch nicht so fit, bzw. benutze es (beruflich) fast ausschließlich als C++-Wrapper, da COM in meiner Firma vorgeschrieben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1406714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1406714</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Tue, 20 Nov 2007 15:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to COM Vererbung on Wed, 21 Nov 2007 11:00:31 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407211</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 21 Nov 2007 11:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to COM Vererbung on Wed, 21 Nov 2007 11:27:38 GMT]]></title><description><![CDATA[<p>Ein solche Vererbung geht definitiv. Aber ohne Code oder genauere<br />
Fehlerbeschreibung von dir kann man dir wohl kaum weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407239</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Wed, 21 Nov 2007 11:27:38 GMT</pubDate></item><item><title><![CDATA[Reply to COM Vererbung on Wed, 21 Nov 2007 13:58:54 GMT]]></title><description><![CDATA[<p>jo, naja, habs inzwischen hingebracht...<br />
es hing daran, dass der Wizard von VS ids für die einzelnen Methoden erstellt hat.<br />
Diese fingen bei 1 an...<br />
Jetzt hatte ich im abgeleiteten Interface ebenfalls eine Methode mit der id 1. Das hatte zur Folge, dass MIDL.exe den Fehler &quot;LayOut failed&quot; geliefert hat. Irgendwann habe ich die IDs dann erhöht und gemerkt... Moment, jetzt gehts und dann habe ich versucht, sie komplett weg zu lassen und siehe da... das geht auch.<br />
Naja, auf jeden Fall habe ich die IDs jetzt im abgeleiteten Interface komplett entfernt und alles ist Tutti. Leider findet man online dazu keinerlei Informationen irgendwie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407352</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Wed, 21 Nov 2007 13:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to COM Vererbung on Fri, 23 Nov 2007 12:17:36 GMT]]></title><description><![CDATA[<p>so, naja, nachdem ich das hingebracht habe, ist bei mir das nächste Problem aufgelaufen.<br />
Da ich nicht nur das Interface, sondern auch einen Teil der Klassenimplementierung vererben möchte, habe ich dies nun versucht und mir eine Klasse erstellt, von der einige Implementierungen erben sollen, da einiges öfters gleich ist. Deswegen habe ich mir überlegt, ich könnte ja eine Basisklasse erstellen, die bestimmte Methoden implementiert und diese an die abgeleiteten Klassen vererbt. Also hier ist mein prinzipieller Aufbau:</p>
<pre><code class="language-cpp">class ATL_NO_VTABLE baseclass: IBaseInterface
{
//Methodendeklarationen + -implementierungen in der *.cpp file
};
</code></pre>
<p>so sieht zumindest meine Basisklasse aus, sinnvollerweise sind die Methoden auch noch mittels</p>
<pre><code class="language-cpp">STDMETHOD(call_me_a_method)(BSTR x, LONG y);
</code></pre>
<p>also &quot;COM-fähig&quot; deklariert.<br />
Nun erhalte ich allerdings Fehler beim Kompilieren der abgeleiteten Klassen, die von den (vom Wizard erzeugten) COM-Basisklassen erben.<br />
Der Output ist annähernd folgender (kann jetzt nicht die Klassennamen etc posten, hat andere Gründe):</p>
<pre><code>1&gt;... error C2594: 'argument' : ambiguous conversions from '&lt;classname&gt; *const ' to 'IDispatch *'
1&gt;... error C2243: 'type cast' : conversion from '&lt;classname&gt; *const ' to 'IDispatch *' exists, but is inaccessible
</code></pre>
<p>Weiß da irgendwer bescheid, bzw kann mir da irgendwer helfen?<br />
Wär echt verdammt cool, weil sonst muss ich nen total unschönen Aufbau meiner Klassen verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408778</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Fri, 23 Nov 2007 12:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to COM Vererbung on Mon, 26 Nov 2007 11:39:31 GMT]]></title><description><![CDATA[<p>Sorry, dass ich hier noch mal schreiben muss, aber ich habe eine weitere Frage (nachdem die alte eigentlich obsolet ist):<br />
Ist es nun möglich, COM-Implementierungen zu vererben, um nicht auf Aggregation oder Ähnliches angewiesen zu sein?<br />
Wenn die Vererbung nicht geht, habe ich nämlich das Problem, dass entweder die Implementierung der Klasse ziemlich groß wird oder ich gleiche Methoden häufig implementieren muss. Geht das über einen Weg?<br />
Ich habe es jetzt schon folgendermaßen probiert:</p>
<pre><code class="language-cpp">class BaseImpl: public IBase
{
//methoden etc
};

class DerivedImpl: public BaseImpl, public IDerived
{
 //methoden etc
};

class ATL_NO_VTABLE CDerived:
        public CComObjectRootEx&lt;CComSingleThreadModel&gt;,
	public CComCoClass&lt;CDerived, &amp;CLSID_Derived&gt;,
	public ISupportErrorInfo,
	public IDispatchImpl&lt;DerivedImpl, &amp;IID_ISimple, &amp;LIBID_paramlibcomLib, /*wMajor =*/ 1, /*wMinor =*/ 0&gt;
{
//... was noch so kommt
};
</code></pre>
<p>und jetzt würde eigentlich die COM_MAP kommen, allerdings erhalte ich da immer Fehlermeldungen bezüglich ambiguous casts zu IDispatch * . Ich weiß jetzt nicht, ob irgendwer eine Ahnung davon hat, wäre auf jeden Fall ganz cool, wenn des gehen würde und mir irgendwer das sagen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1410261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1410261</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Mon, 26 Nov 2007 11:39:31 GMT</pubDate></item></channel></rss>