<?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[[Erledigt] Funktionen und Klassen aus DLL exportieren]]></title><description><![CDATA[<p>Grüß euch!</p>
<ol>
<li></li>
</ol>
<p>Ich lade meine DLL zur Runtime und möchte daraus via</p>
<pre><code class="language-cpp">GetProcAddress(Module, ProcName);
</code></pre>
<p>die Adresse einer Funktion laden, um sie später aufzurufen.</p>
<p>Wenn ich nun in meiner DLL</p>
<pre><code class="language-cpp">__declspec( dllexport )
void TestFunc( void )
{
	MessageBox( 0, &quot;Test&quot;, &quot;Test:&quot;, MB_OK );
}
</code></pre>
<p>deklariere, generiert mein Linker:</p>
<pre><code>?TestFunc@@YAXXZ
</code></pre>
<p>mit einer definition à la</p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec( dllexport )
void TestFunc( void )
{
    MessageBox( 0, &quot;Test&quot;, &quot;Test:&quot;, MB_OK );
}
</code></pre>
<p>bekomm ich die Dekoration weg. Ist das &quot;legal&quot;?</p>
<ol start="2">
<li>Wie definiere ich eine Klasse in einer DLL un sie in meiner Executeable zu instantiieren?</li>
</ol>
<p>Aus</p>
<pre><code class="language-cpp">class __declspec( dllexport ) TestClass {
    public:
        void test() {
            MessageBox( 0, &quot;Hello, Class!&quot;, &quot;Test:&quot;, MB_OK );
        }
};
</code></pre>
<p>macht der linker zwar</p>
<pre><code>??4TestClass@@QAEAAV0@ABV0@@Z
?test@TestClass@@QAEXXZ
</code></pre>
<p>aber ich hab' keinen Plan, wie ich nun meine TestClass instantiieren soll. Da braucht mein Programm (welches die DLL lädt) doch die deklaration von <em>TestClass</em>, oder? Nun, wenn ich meinem Programm nun die Deklaration von <em>TestClass</em> mit</p>
<pre><code class="language-cpp">class __declspec( dllimport ) TestClass {
    public:
        void test();
};
</code></pre>
<p>verrate, kann ich sie zwar instantiieren aber der Linker hat keinen Dunst von der adresse von <em>TestClass::test()</em> womit</p>
<pre><code class="language-cpp">TestClass c;
c.test();
</code></pre>
<p>auch wieder nicht funktioniert.</p>
<p>Wer kann mir behilflich sein?</p>
<p>&lt;disclaimer&gt;<br />
Hab' Google gefragt, jedoch nichts brauchbares gefunden.<br />
Benutze Microsoft Visual Studio .net 2003 unter Windows Server 2003.<br />
&lt;/disclaimer&gt;</p>
<p>thxia, Swordfish</p>
<p>[edit: Erledigt]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/145337/erledigt-funktionen-und-klassen-aus-dll-exportieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 05:24:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145337.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Apr 2006 04:20:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Erledigt] Funktionen und Klassen aus DLL exportieren on Thu, 27 Apr 2006 06:25:14 GMT]]></title><description><![CDATA[<p>Grüß euch!</p>
<ol>
<li></li>
</ol>
<p>Ich lade meine DLL zur Runtime und möchte daraus via</p>
<pre><code class="language-cpp">GetProcAddress(Module, ProcName);
</code></pre>
<p>die Adresse einer Funktion laden, um sie später aufzurufen.</p>
<p>Wenn ich nun in meiner DLL</p>
<pre><code class="language-cpp">__declspec( dllexport )
void TestFunc( void )
{
	MessageBox( 0, &quot;Test&quot;, &quot;Test:&quot;, MB_OK );
}
</code></pre>
<p>deklariere, generiert mein Linker:</p>
<pre><code>?TestFunc@@YAXXZ
</code></pre>
<p>mit einer definition à la</p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec( dllexport )
void TestFunc( void )
{
    MessageBox( 0, &quot;Test&quot;, &quot;Test:&quot;, MB_OK );
}
</code></pre>
<p>bekomm ich die Dekoration weg. Ist das &quot;legal&quot;?</p>
<ol start="2">
<li>Wie definiere ich eine Klasse in einer DLL un sie in meiner Executeable zu instantiieren?</li>
</ol>
<p>Aus</p>
<pre><code class="language-cpp">class __declspec( dllexport ) TestClass {
    public:
        void test() {
            MessageBox( 0, &quot;Hello, Class!&quot;, &quot;Test:&quot;, MB_OK );
        }
};
</code></pre>
<p>macht der linker zwar</p>
<pre><code>??4TestClass@@QAEAAV0@ABV0@@Z
?test@TestClass@@QAEXXZ
</code></pre>
<p>aber ich hab' keinen Plan, wie ich nun meine TestClass instantiieren soll. Da braucht mein Programm (welches die DLL lädt) doch die deklaration von <em>TestClass</em>, oder? Nun, wenn ich meinem Programm nun die Deklaration von <em>TestClass</em> mit</p>
<pre><code class="language-cpp">class __declspec( dllimport ) TestClass {
    public:
        void test();
};
</code></pre>
<p>verrate, kann ich sie zwar instantiieren aber der Linker hat keinen Dunst von der adresse von <em>TestClass::test()</em> womit</p>
<pre><code class="language-cpp">TestClass c;
c.test();
</code></pre>
<p>auch wieder nicht funktioniert.</p>
<p>Wer kann mir behilflich sein?</p>
<p>&lt;disclaimer&gt;<br />
Hab' Google gefragt, jedoch nichts brauchbares gefunden.<br />
Benutze Microsoft Visual Studio .net 2003 unter Windows Server 2003.<br />
&lt;/disclaimer&gt;</p>
<p>thxia, Swordfish</p>
<p>[edit: Erledigt]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046088</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 27 Apr 2006 06:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Erledigt] Funktionen und Klassen aus DLL exportieren on Thu, 27 Apr 2006 06:06:24 GMT]]></title><description><![CDATA[<p>1. Das einfachste ist, Du verwendest eine def-Datei, indem der Name undekoriert reingeschrieben wird<br />
2. Du verwendest 'extern &quot;C&quot;', dann ist der Namen zumindest nicht mehr ganz so unschön<br />
3. Klassen via GetProcAddress einzubinden wird nicht unterstützt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046096</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 27 Apr 2006 06:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to [Erledigt] Funktionen und Klassen aus DLL exportieren on Thu, 27 Apr 2006 06:10:33 GMT]]></title><description><![CDATA[<p>Besten Dank für Deine Antwort.</p>
<p>Das instantiieren der Klassen hat sich erübrigt:<br />
Ich verwende eine virtuelle Basisklasse als Interface.</p>
<p>Aber wie erstelle und verwende ich eine .def-Datei?<br />
Ist die verwendung von</p>
<pre><code class="language-cpp">extern &quot;C&quot; //...
</code></pre>
<p>nicht eher unschön?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046099</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 27 Apr 2006 06:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to [Erledigt] Funktionen und Klassen aus DLL exportieren on Thu, 27 Apr 2006 06:14:33 GMT]]></title><description><![CDATA[<p>Was schön oder unschön ist musst Du selber festlegen.<br />
Eine Def-Datei ist eine normale Textdatei der Form:</p>
<blockquote>
<p>EXPORTS<br />
Funktion1<br />
Funktion2</p>
</blockquote>
<p>Diese musst Du einfach in Deiner Linker Einstellungen der DLL angeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046102</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 27 Apr 2006 06:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to [Erledigt] Funktionen und Klassen aus DLL exportieren on Thu, 27 Apr 2006 06:24:09 GMT]]></title><description><![CDATA[<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1046107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1046107</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 27 Apr 2006 06:24:09 GMT</pubDate></item></channel></rss>