<?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[Wie deklariert man ein COM interface?]]></title><description><![CDATA[<p>Hallo.</p>
<p>Wie der titel schon sagt: Wie deklariert man ein COM interface?</p>
<p>Sobald ich das schlüsselwort 'interface' in einen header eintrage, behauptet er ich müsse ein ';' danach machen:</p>
<pre><code>interface ITest
{   
    void P1();
    void P2();
}
</code></pre>
<p>Die hilfe zu dem thema ist auch nicht gerade übersichtlich. Und vor allem wo und wie deklariere ich die IID (GUID)?</p>
<p>Ich finde einfach keine gute anleitung zu dem thema! Vielleicht wisst ihr welche?</p>
<p>vielen dank <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="🙂"
    /> ..maximov</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/55611/wie-deklariert-man-ein-com-interface</link><generator>RSS for Node</generator><lastBuildDate>Tue, 02 Jun 2026 06:14:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/55611.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Nov 2003 11:10:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Tue, 18 Nov 2003 11:10:07 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Wie der titel schon sagt: Wie deklariert man ein COM interface?</p>
<p>Sobald ich das schlüsselwort 'interface' in einen header eintrage, behauptet er ich müsse ein ';' danach machen:</p>
<pre><code>interface ITest
{   
    void P1();
    void P2();
}
</code></pre>
<p>Die hilfe zu dem thema ist auch nicht gerade übersichtlich. Und vor allem wo und wie deklariere ich die IID (GUID)?</p>
<p>Ich finde einfach keine gute anleitung zu dem thema! Vielleicht wisst ihr welche?</p>
<p>vielen dank <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="🙂"
    /> ..maximov</p>
]]></description><link>https://www.c-plusplus.net/forum/post/396639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/396639</guid><dc:creator><![CDATA[maximov]]></dc:creator><pubDate>Tue, 18 Nov 2003 11:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Tue, 18 Nov 2003 14:56:00 GMT]]></title><description><![CDATA[<p>am besten über Einfügen-&gt; neues ATL-Objekt usw.<br />
Dann macht VS alles von alleine und du kannst dann dein Interface bestücken.<br />
So long...</p>
<p>Ciao,</p>
<p>Stalin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/396898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/396898</guid><dc:creator><![CDATA[Stalin]]></dc:creator><pubDate>Tue, 18 Nov 2003 14:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Wed, 19 Nov 2003 09:38:16 GMT]]></title><description><![CDATA[<p>in C++ als class, die von IUnknown ableitet und nur virtuell abstrakte methoden enthält, sonst nix. Rückgabewert zumeist HRESULT, ist aber nicht 100% zwingend. parameter müssen COM-Kompatibel sein.</p>
<pre><code>class IFoo : public IUnknown
{
  public:
    HRESULT Foo() = 0;
    HRESULT Bar() = 0;
};
</code></pre>
<p>Wenn jemand anders dein Interface auch kennen soll, dann reicht das natürlich nicht <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>
<p>IDL ist eine Beschreibungssprache für interfaces, die es erlaubt die notwendigen Marshalling-Zusatzinformationen (die man in C++ nicht angeben kann) anzugeben. der MIDL Compiler kann dir daraus dann machen:<br />
- eine Typbibliothek (.tlb, die kann man dann &quot;überall&quot; reinziehen)<br />
- C/C++ header<br />
- Ein Proxy/Stub-Projekt für Cross-Apartment-Marshalling</p>
<p>Das einfachste ist natürlich, man nimmt den ATL Wizard, wie schon vorgeschlagen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/397527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/397527</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Wed, 19 Nov 2003 09:38:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Wed, 19 Nov 2003 09:52:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct IMyInterface : public IUnknown
{
    STDMETHOD_(type) MyMethod1() = 0;
    STDMETHOD_(type) MyMethod2() = 0;
};
</code></pre>
<p>So, oder so ähnlich, wird das mit MFC gemacht, ohne ATL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/397540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/397540</guid><dc:creator><![CDATA[proga]]></dc:creator><pubDate>Wed, 19 Nov 2003 09:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Wed, 19 Nov 2003 17:08:25 GMT]]></title><description><![CDATA[<p>Aha...danke schonmal! Das &gt;public: IUnknown&lt; war die info die ich brauchte <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>ATL etc. kommt leider nicht in frage da die dll in einer anderen sprache erzeugt wurde <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="😉"
    /> ...deshalb habe ich auch keinen header, womit ich auch schon beim nächsten problem wäre:</p>
<p>Und zwar habe ich eine factory function exportiert, die mir einen pointer auf eine gültige instanze zurück gibt. Beim blind importieren, in vc++, bekomme ich allerdings probleme:</p>
<pre><code>#ifdef EXPORTS
#define MX __declspec(dllexport) __stdcall
#else
#define MX __declspec(dllimport) __stdcall
#endif
#define STDCALL __stdcall

class ITest: public IUnknown 
{
public:
  virtual void P1() = 0;
  virtual void P2() = 0;
};

extern &quot;C&quot; ITest* MX CreateTest();
</code></pre>
<blockquote>
<p>error LNK2001: Nichtaufgeloestes externes Symbol _CreateTest@0</p>
</blockquote>
<p>Meine frage wäre hier, wenn der header den selber namen wie die DLL hat, wird der bezug dann automatisch hergestellt? ...oder wie kann ich das statisch linken, sodass das symbol aufgelöst werden?</p>
<p>mfg. maximov.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/398115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/398115</guid><dc:creator><![CDATA[maximov]]></dc:creator><pubDate>Wed, 19 Nov 2003 17:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Wed, 19 Nov 2003 17:47:19 GMT]]></title><description><![CDATA[<p>beschreib mal bite genauer was du machen willst, eh' wir uns auf die falsceh Fährte verirren.</p>
<p>um ein COM-Objekt zu nutzen kannst du entweder:</p>
<p>- in MFC Clazz Wizard &quot;Add Class/from type library&quot; verwenden<br />
- mit #import die type libary des objekts reinziehen</p>
<p>ich bevorzuge #import, arbeitet aber mit exceptions.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/398160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/398160</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Wed, 19 Nov 2003 17:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Thu, 20 Nov 2003 14:15:48 GMT]]></title><description><![CDATA[<p>Langsam komme ich der sache schon näher!</p>
<p>Ich hab jetzt eine .tlb die ich mit #import reinziehe. Er generiert mir auch brav einen header dafür -&gt; .tlh! Aber wenn ich dann mein interface nutzen will, sagt er, dass die klasse nicht definiert ist! ??</p>
<p>Ich hab aber auch eine .idl:</p>
<pre><code>[
  uuid(D00A1D1E-9E40-4B30-A6BE-780CED4435A7), 
  lcid(0x075BCD15), 
  version(1.0), 
  helpstring(&quot;crossroad Bibliothek&quot;)    
]
library crossroad
{
  importlib(&quot;stdole2.tlb&quot;);
  [
    uuid(205BC04F-66FA-4A44-A277-DBF936861E34), 
    version(1.0), 
    helpstring(&quot;Schnittstelle für TCross Objekt&quot;), 
    dual, 
    oleautomation
  ]
   interface ICross: IDispatch
  {
    [
    id(0x000000C9)
    ]
    HRESULT _stdcall P1( void );
    [
    id(0x000000CA)
    ]
    HRESULT _stdcall P2([in] int Param1 );
  };
  [
    uuid(9C6AF351-017B-4FD7-9CEE-6340E04E494D), 
    version(1.0), 
    helpstring(&quot;TCross&quot;)
  ]
  coclass TCross
  {
    [default] interface ICross;
  };
};
</code></pre>
<p>Kann man damit vielleicht was machen?</p>
<p>Dann hab ichs noch mit dem klassen assistenten versucht...ging auch sehr gut -&gt; klasse hinzufügen -&gt; aus typbibl.. -&gt; dann hat er direkt aus der dll das interface erkannt und mir einen header ins projekt gebunden! Nur leider konnte dann wieder ein externes symbol nicht auflösen <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>
<blockquote>
<p>error LNK2001: Nichtaufgeloestes externes Symbol &quot;public: void __thiscall ICross::P1(void)&quot; (?P1@ICross@@QAEXXZ)</p>
</blockquote>
<p>Wie ist denn der zusammenhang von meiner anwendung zu der DLL mit dem interface?</p>
<p>danke an alle und im vorraus <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>PS: Wo wird beim linken nach symbolen gesucht? auch in DLLs? wenn nicht wäre das ja auch kein wunder! In libs? kann man vielleicht aus ner IDL oder TLB eine lib gerenieren?</p>
<p>cu. maximoi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/398814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/398814</guid><dc:creator><![CDATA[maximov]]></dc:creator><pubDate>Thu, 20 Nov 2003 14:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Sat, 22 Nov 2003 00:57:21 GMT]]></title><description><![CDATA[<p><a href="http://www.henkessoft.de/mfc_einsteigerbuch_kapitel15.htm" rel="nofollow">http://www.henkessoft.de/mfc_einsteigerbuch_kapitel15.htm</a> zum Einstieg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/400017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/400017</guid><dc:creator><![CDATA[loopie]]></dc:creator><pubDate>Sat, 22 Nov 2003 00:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wie deklariert man ein COM interface? on Mon, 24 Nov 2003 11:07:19 GMT]]></title><description><![CDATA[<p>Jaaa! Es geht <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="🙂"
    /> Vielen dank für den tip. So kompliziert is das alles garnicht, hatte nur paar schwierigkeiten die definition in c++ richtig hinzubekommen <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>
<p>Danke.</p>
<p>cu. maximov.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/401172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/401172</guid><dc:creator><![CDATA[maximov]]></dc:creator><pubDate>Mon, 24 Nov 2003 11:07:19 GMT</pubDate></item></channel></rss>