<?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&#x27;s]]></title><description><![CDATA[<p>Hi,<br />
ich belese mich grad etwas mit dem Thema DLL's und hätte da ein paar fragen.<br />
Praktische Erfahrung habe ich zum Thema noch keine.</p>
<p>Ich denke dass ich das mit &quot;normalen&quot; Funktionen in DLL's verstanden habe.<br />
Folgendes Problem.<br />
Ich habe mehrere Klassen die ich in eine DLL stecken möchte.<br />
Diese Klassen werden in verschiedenen programmen genuzt, sollte sich jetzt etwas intern ändern (z.B. code optimierungen) möchte ich die DLL einfach neu bauen und bei den betreffenden Anwendungen einfach austauschen.</p>
<p>Ich habe etwas herum gegoogelt und für mich keine vernünftige lösung finden können.</p>
<p>Sowas wie hier möchte ich einfach nicht nutzen um an meine Klasse zu kommen, da muss es doch eine bessere/elegantere Lösung geben.</p>
<pre><code class="language-cpp">extern &quot;C&quot; void* DLLIMPORT CreateClassInstance()
{
    return ((void*)(new MyClass));
}
</code></pre>
<p>Mein testversuch sieht folgendermaßen aus.</p>
<p><strong>Headder</strong></p>
<pre><code class="language-cpp">#ifndef _TEST_H_
#define _TEST_H_

#ifdef __TEST_H__
#   define DllUse __declspec(dllexport)
#else
#   define DllUse __declspec(dllimport)
#endif

class DllUse DllTestClass
{
public:

    DllTestClass();
    ~DllTestClass();

    void Print ();
};
#endif
</code></pre>
<pre><code class="language-cpp">#define __TEST_H__

#include &quot;Test.h&quot;
#include &lt;stdio.h&gt;

DllTestClass::DllTestClass()
{

}

DllTestClass::~DllTestClass()
{

}

void DllTestClass::Print()
{
    printf(&quot;Ich Bin eine test Klasse&quot;);
}
</code></pre>
<p>Wie komme ich denn jetzt in einem Anderen Projekt an meine Klasse heran, bzw ist die Klassen Definition so richtig oder fehlt noch etwas?</p>
<p>Gruß,<br />
Sascha</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251099/klassen-in-dll-s</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 17:34:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251099.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Sep 2009 11:19:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 11:19:47 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich belese mich grad etwas mit dem Thema DLL's und hätte da ein paar fragen.<br />
Praktische Erfahrung habe ich zum Thema noch keine.</p>
<p>Ich denke dass ich das mit &quot;normalen&quot; Funktionen in DLL's verstanden habe.<br />
Folgendes Problem.<br />
Ich habe mehrere Klassen die ich in eine DLL stecken möchte.<br />
Diese Klassen werden in verschiedenen programmen genuzt, sollte sich jetzt etwas intern ändern (z.B. code optimierungen) möchte ich die DLL einfach neu bauen und bei den betreffenden Anwendungen einfach austauschen.</p>
<p>Ich habe etwas herum gegoogelt und für mich keine vernünftige lösung finden können.</p>
<p>Sowas wie hier möchte ich einfach nicht nutzen um an meine Klasse zu kommen, da muss es doch eine bessere/elegantere Lösung geben.</p>
<pre><code class="language-cpp">extern &quot;C&quot; void* DLLIMPORT CreateClassInstance()
{
    return ((void*)(new MyClass));
}
</code></pre>
<p>Mein testversuch sieht folgendermaßen aus.</p>
<p><strong>Headder</strong></p>
<pre><code class="language-cpp">#ifndef _TEST_H_
#define _TEST_H_

#ifdef __TEST_H__
#   define DllUse __declspec(dllexport)
#else
#   define DllUse __declspec(dllimport)
#endif

class DllUse DllTestClass
{
public:

    DllTestClass();
    ~DllTestClass();

    void Print ();
};
#endif
</code></pre>
<pre><code class="language-cpp">#define __TEST_H__

#include &quot;Test.h&quot;
#include &lt;stdio.h&gt;

DllTestClass::DllTestClass()
{

}

DllTestClass::~DllTestClass()
{

}

void DllTestClass::Print()
{
    printf(&quot;Ich Bin eine test Klasse&quot;);
}
</code></pre>
<p>Wie komme ich denn jetzt in einem Anderen Projekt an meine Klasse heran, bzw ist die Klassen Definition so richtig oder fehlt noch etwas?</p>
<p>Gruß,<br />
Sascha</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785855</guid><dc:creator><![CDATA[_Sascha_]]></dc:creator><pubDate>Tue, 29 Sep 2009 11:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 12:02:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define __TEST_H__

#include &quot;Test.h&quot;
</code></pre>
<p>Das wird dir kein besonders erfolgreiches Ergebnis bescheren.</p>
<blockquote>
<p>Wie komme ich denn jetzt in einem Anderen Projekt an meine Klasse heran, bzw ist die Klassen Definition so richtig oder fehlt noch etwas?</p>
</blockquote>
<p>Ansonsten steht hier alles was du wissen musst: <a href="http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785884</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 29 Sep 2009 12:02:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 12:22:35 GMT]]></title><description><![CDATA[<p><em>Sascha</em> schrieb:</p>
<blockquote>
<p>ich belese mich grad etwas mit dem Thema DLL's und hätte da ein paar fragen.</p>
</blockquote>
<p>Vielleicht eines vorneweg: Dlls sind nicht Teil des C++ Standards, und können unter unterschiedlichen Plattformen auch anders umzusetzen sein.</p>
<p><em>Sascha</em> schrieb:</p>
<blockquote>
<p>Ich habe mehrere Klassen die ich in eine DLL stecken möchte.</p>
</blockquote>
<p>Zudem bist du auf C-Schnittstellen festgelegt (also Keine Klassen etc.) wenn du dich nicht gerade auf genau einen Compiler und eine Compilerversion festlegen willst (sofern überhaupt möglich). Wie C++ Konstrukte in einer DLL behandelt werden ist nämlich nicht definiert, und auch die Typen können sich unterscheiden (unterschiedliche Compiler verwenden z.B. unterschiedliche Standardbibliotheken etc.).</p>
<p><em>Sascha</em> schrieb:</p>
<blockquote>
<p>Ich habe etwas herum gegoogelt und für mich keine vernünftige lösung finden können.</p>
</blockquote>
<p>Es gibt leider auch keine Vernümpftigen. Es gibt einige Tricks etc. wie man unter Umständen auch Klassen über DLLs und Compilergrenzen hinweg exportieren/importieren kann - aber selbst diese Tricks garantieren nichts (wie ich auch aus eigener Erfahrung bestätigen kann).</p>
<p>Die beste Möglichkeit unter C++ ist noch wenn eine Bibliothek im Sourcecode vorliegt. Ansonsten kann ich dir nach dem derzeitigen Stand (was auch für den Kommenden Standard immer noch gilt) sagen: Klassen und dlls sind unter C++ ein eher unschönes Thema (Hier sind .Net und Java deutlich besser).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a>: Für links gibt es nicht ohne Grund eigene Tags. Hier nochmal der <a href="http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx" rel="nofollow">Link</a> von dir...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785894</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Sep 2009 12:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 12:45:03 GMT]]></title><description><![CDATA[<p>okay alles Klar, dank dir asc!<br />
Hatte mich schon gewundert warum in allen Tutorials die ich gefunden habe und auch in der msdn nie auf klassen eingegangen wird sondern nur auf Funktionen.</p>
<p>Gruß,<br />
Sascha</p>
<p><strong>edit:</strong><br />
So interesse halber, wie sähe denn eine Lösung mit .Net aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1785896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785896</guid><dc:creator><![CDATA[_Sascha_]]></dc:creator><pubDate>Tue, 29 Sep 2009 12:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 14:03:15 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a>: Für links gibt es nicht ohne Grund eigene Tags. Hier nochmal der <a href="http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx" rel="nofollow">Link</a> von dir...</p>
</blockquote>
<p>Und weiter? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1785976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1785976</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 29 Sep 2009 14:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 16:13:40 GMT]]></title><description><![CDATA[<p>Hallo Sascha,</p>
<p>wenn du alle Programme mit demselben Compiler erstellst, dann kannst du auch Klassen exportieren. Solange du die Schnittstelle nicht änderst, kannst du dann auch einfach die DLL austauschen.</p>
<p>Unter .NET z.B. mittels C++/CLI sind die DLLs (auch Assemblies genannt) normiert, so daß sie für verschiedene .NET-Sprachen und Systeme funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1786073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1786073</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 29 Sep 2009 16:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL&#x27;s on Tue, 29 Sep 2009 16:35:54 GMT]]></title><description><![CDATA[<p>Hey Th69,</p>
<p>also sieht es ohne .Net eher schlecht aus?<br />
Ein App müsste ohne .Net Framework unter WinCe laufen, ein anderes wiederum mit C#.</p>
<p>Um es mal direkt am Beispiel zu sehen.<br />
Folgendes Frage/Problematik mit der gefundenen Lösung hat mich dann hier her geführt: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-250803.html" rel="nofollow">Forum Eintrag</a></p>
<p>Das ganze serialisierungs Thema soll eben diese Klasse(n) übernhemen.</p>
<p>Ich möchte also meine Klasse nicht zweimal (einmal c++ und einmal c#) implementieren, sondern den Code zentral haben. Deswegen wollte ich es via Dll lösen.</p>
<p>Evtl gibt es da ja auch einen besseren Ansatz.</p>
<p>Gruß,<br />
Sascha</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1786100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1786100</guid><dc:creator><![CDATA[_Sascha_]]></dc:creator><pubDate>Tue, 29 Sep 2009 16:35:54 GMT</pubDate></item></channel></rss>