<?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[Klassen in DLL]]></title><description><![CDATA[<p>Nach mühevoller Kleinarbeit kann ich DLLs erzeugen und Funktionen aus den DLLs auch nutzen (via lib-Datei). Das gilt auch für einzelne Methoden aus Klassen.</p>
<p>Was mir nicht gelingt: Klassen mit allen Eigenschaften und Methoden in einer DLL unterzubringen und diese dann zu linken, damit mir die ganze Funktionalität der Klasse zur Verfügung steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/148664/klassen-in-dll</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 18:01:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148664.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 May 2006 10:43:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen in DLL on Mon, 29 May 2006 10:43:16 GMT]]></title><description><![CDATA[<p>Nach mühevoller Kleinarbeit kann ich DLLs erzeugen und Funktionen aus den DLLs auch nutzen (via lib-Datei). Das gilt auch für einzelne Methoden aus Klassen.</p>
<p>Was mir nicht gelingt: Klassen mit allen Eigenschaften und Methoden in einer DLL unterzubringen und diese dann zu linken, damit mir die ganze Funktionalität der Klasse zur Verfügung steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067236</guid><dc:creator><![CDATA[theosoft]]></dc:creator><pubDate>Mon, 29 May 2006 10:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Mon, 29 May 2006 10:53:19 GMT]]></title><description><![CDATA[<p>Genau wie Funktionen</p>
<pre><code class="language-cpp">#ifdef __DLL__
#	define DLL_TYP __declspec(dllexport)
#else
#	define DLL_TYP __declspec(dllimport)
#endif
</code></pre>
<pre><code class="language-cpp">class DLL_TYP GFile
{
public:
    ......

private:
  ........
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1067243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067243</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Mon, 29 May 2006 10:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Mon, 29 May 2006 10:58:23 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Header der Klassen-Unit, die in der DLL verfügbar gemacht werden soll</p>
<pre><code class="language-cpp">#if BUILDING_DLL
  #define DLL_IMPORT __declspec(dllexport)
#else
  #define DLL_IMPORT __declspec(dllimport)
#endif

class DLL_IMPORT myclass ...
{
}
</code></pre>
<p>In den Projekt-Eigenschaften der DLL fügst du unter <em>Verzeichnisse/Bedingungen</em> in der Liste Bedingungen <em>BUILDING_DLL</em> hinzu.</p>
<p>Nachdem kompletten Kompilieren der DLL hast du nun die .lib<br />
Sowohl .lib als auch diese Header-Datei bindest du in deinem darauf zugreifenden Host-Projekt ein, fertig.</p>
<p>/Edit : viel zu langsam</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067251</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 29 May 2006 10:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Mon, 29 May 2006 14:14:40 GMT]]></title><description><![CDATA[<p>... zunächst vielen Dank.<br />
So in der Art habe ich es mir ja vorgestellt; nur leider funkt das nicht so richtig.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Könnte das an meiner alten Version 4 des Borland c++ Builders liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067446</guid><dc:creator><![CDATA[theosoft]]></dc:creator><pubDate>Mon, 29 May 2006 14:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Mon, 29 May 2006 16:26:54 GMT]]></title><description><![CDATA[<blockquote>
<p>nur leider funkt das nicht so richtig.</p>
</blockquote>
<p>Ist kein Fehler. Sollen wir raten was nicht geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067512</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Mon, 29 May 2006 16:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Mon, 29 May 2006 16:52:47 GMT]]></title><description><![CDATA[<p>Der Fehler ist ein altbekannter Linkerfehler:<br />
Unresolved external 'Crechnen::addieren(int)' referenced from ...\DLL_USER.OBJ.</p>
<p>Schnipsel vom Code der DLL:</p>
<pre><code class="language-cpp">int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
        return 1;
}
//---------------------------------------------------------------------------
__declspec(dllexport) int doppel(int _einfach)
{
  return (2 * _einfach);
}
//---------------------------------------------------------------------------

class __declspec(dllexport) Crechnen
{
   public:
   int addieren(int _zahl)
   {
     return (200 + _zahl);
   }
};
</code></pre>
<p>und wenn ich die Funktionen aus der DLL benutzen will ...</p>
<pre><code class="language-cpp">Label1-&gt;Caption = doppel(9);             // liefert 18
  Label1-&gt;Caption = rechnen-&gt;addieren(200);   // funkt nicht!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1067536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067536</guid><dc:creator><![CDATA[theosoft]]></dc:creator><pubDate>Mon, 29 May 2006 16:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Tue, 30 May 2006 05:10:00 GMT]]></title><description><![CDATA[<pre><code>rechnen-&gt;addieren
</code></pre>
<p>Wie hast du die Klasse erstellt? Da du einen Zeiger hast, wirst du wohl LoadLibrary und GetProcessAdress genutzt haben?</p>
<p>Alternativ kannst du die Lib in dein Projket mit aufnehmen und die Klasse mit</p>
<p>CRechnen rechne;</p>
<p>erzeugen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067769</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Tue, 30 May 2006 05:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Tue, 30 May 2006 05:44:02 GMT]]></title><description><![CDATA[<p>Wie zum Teufel soll dein Programm (falls du wirklich GetProcAddress() verwendet haben solltest) wissen, auf welche Instanz sich der Aufruf</p>
<pre><code class="language-cpp">rechnen-&gt;addieren( 200 );
</code></pre>
<p>bezieht?</p>
<p>Das wird so niemals funktionieren.</p>
<p>Bei Klassen musst du eine pure virtual Basisklasse (Interface) haben, welche sowohl in DLL als auch in deiner Application bekannt ist. In der DLL leitest du dann die eigentliche Implementation davon ab und überschreibst alles virtuelle. Um diese Klasse zu instanziieren, benötigst du eine Funktion in der DLL, welche ein neues Objekt erstellt und einen Pointer darauf zurückgibt:</p>
<pre><code class="language-cpp">/* unser Interface: */

class ITestClass {

    public:

        virtual void test_method ( )  = 0;
        virtual void release( )       = 0;
};

/* die Implementation: */

class CTestClass : public ITestClass {

    public:

        CTestClass( ) { };
        ~CTestClass( ) { };

        virtual void test_method( );
        virtual void release( );
};

void CTestClass::release( )
{
    delete this;
}

void CTestClass::test_method( )
{
    MessageBox( 0, &quot;CTestClass::test()&quot;, &quot;DLL:&quot;, MB_OK );
}

/* Die einzige Funktion, welche exportiert wird: */

TEST_API ITestClass* GetTestClassInterface( void )
{
    return dynamic_cast&lt; ITestClass* &gt;( new CTestClass() );
}
</code></pre>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067771</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 30 May 2006 05:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Tue, 30 May 2006 08:00:02 GMT]]></title><description><![CDATA[<p>Den dynamic_cast solltest du weglassen. Der ist bei einem Upcast unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067834</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 30 May 2006 08:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL on Tue, 30 May 2006 14:34:57 GMT]]></title><description><![CDATA[<p>Mit Hilfe eurer Anregungen konnte ich mein Problem lösen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Ich danke für eure Mühe und eure Geduld <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068134</guid><dc:creator><![CDATA[theosoft]]></dc:creator><pubDate>Tue, 30 May 2006 14:34:57 GMT</pubDate></item></channel></rss>