<?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[Klasse aus DLL exportieren]]></title><description><![CDATA[<p>Hallo Community,</p>
<p>ich versuche derzeitig, eine Klasse aus einer DLL zu exportieren und sie dann in meiner eigentlichen Anwendung wieder zu importieren.</p>
<p>Wie man einfache Funktionen in einer DLL mittels .def-File exportiert ist mir bekannt und das funktioniert auch.</p>
<p>Mein .def-File sieht so aus:</p>
<pre><code>EXPORTS
	NewVehicle @1
	DeleteVehicle @2
</code></pre>
<p>Die beiden Funktionen sind globale Funktionen.</p>
<p>In meiner eigentlichen Anwendung versuche ich jetzt über LoadLibrary und GetProcAddress zunächst die globalen Funktionen aufzurufen. Das funktioniert, wie gesagt.</p>
<p>Sobald ich aber versuche, eine Memberfunktion des mittels NewVehicle instanziierten Objektes in meiner eigentlichen Anwendung aufzurufen, sagt der Linker mir, dass er die Funktion nicht finden kann. Wie gebe ich die Klasse bzw. die Member-Funktionen im .def-File an?</p>
<p>Vielen Dank im Voraus! VG, '][' !</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190263/klasse-aus-dll-exportieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 08:18:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190263.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Aug 2007 10:44:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse aus DLL exportieren on Tue, 21 Aug 2007 10:44:33 GMT]]></title><description><![CDATA[<p>Hallo Community,</p>
<p>ich versuche derzeitig, eine Klasse aus einer DLL zu exportieren und sie dann in meiner eigentlichen Anwendung wieder zu importieren.</p>
<p>Wie man einfache Funktionen in einer DLL mittels .def-File exportiert ist mir bekannt und das funktioniert auch.</p>
<p>Mein .def-File sieht so aus:</p>
<pre><code>EXPORTS
	NewVehicle @1
	DeleteVehicle @2
</code></pre>
<p>Die beiden Funktionen sind globale Funktionen.</p>
<p>In meiner eigentlichen Anwendung versuche ich jetzt über LoadLibrary und GetProcAddress zunächst die globalen Funktionen aufzurufen. Das funktioniert, wie gesagt.</p>
<p>Sobald ich aber versuche, eine Memberfunktion des mittels NewVehicle instanziierten Objektes in meiner eigentlichen Anwendung aufzurufen, sagt der Linker mir, dass er die Funktion nicht finden kann. Wie gebe ich die Klasse bzw. die Member-Funktionen im .def-File an?</p>
<p>Vielen Dank im Voraus! VG, '][' !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348867</guid><dc:creator><![CDATA[Tanta]]></dc:creator><pubDate>Tue, 21 Aug 2007 10:44:33 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL exportieren on Tue, 21 Aug 2007 13:47:20 GMT]]></title><description><![CDATA[<p>Hallo Tanta,</p>
<p>die Methoden von Klassen werden vom Compiler intern anders benannt ( sog. name mangling / name decoration ) um das Überladen von Methoden hinzubekommen. Der interne Funktionsname beinhaltet neben dem eigentlichen Namen noch Parametertypen und sonstige Infos ( Konstruktoren, ... ).</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">class CDispParams
{
    // ...
    VARIANTARG* GetPositionalParam( UINT nParam );
    COleVariant GetPositionalParam( UINT nParam, VARTYPE vtConv );
};
</code></pre>
<p>Die Methoden werden vom Compiler intern wie folgt genannt:</p>
<pre><code>?GetPositionalParam@CDispParams@@QAEPAUtagVARIANT@@I@Z
?GetPositionalParam@CDispParams@@QAE?AVCOleVariant@@IG@Z
</code></pre>
<p>Die Namen kannst du im Map-File nachschauen oder mit dem Tool DUMPBIN /SYMBOLS in den Object-Files extrahieren.</p>
<p>Wenn du diese Methoden exportierst, kannst du auch den Aufruf der Methoden außerhalb der dll implementieren. Damit du dich aber nicht um die komische Schreibweise kümmern musst, unterstützen manche Compiler das Exportieren von Klassen und Methoden mit speziellen Schlüsselwörtern. Der Eintrag in das DEF-File ist damit nicht mehr notwendig. Für die Microsoft C++ Compiler gibt es die Schlüsselwörter</p>
<pre><code class="language-cpp">__declspec(dllexport)
__declspec(dllimport)
</code></pre>
<p>Damit lässt sich eine Klasse mit allen Methoden z.B. wie folgt exportieren:</p>
<pre><code class="language-cpp">class __declspec(dllexport) CDispParams
{
    // ...
    VARIANTARG* GetPositionalParam( UINT nParam );
    COleVariant GetPositionalParam( UINT nParam, VARTYPE vtConv );
};
</code></pre>
<p>Dokumentation hierzu findest du in der MSDN unter <a href="http://msdn2.microsoft.com/de-de/library/a90k134d(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/de-de/library/a90k134d(VS.80).aspx</a></p>
<p>Gruß<br />
tvdog</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349063</guid><dc:creator><![CDATA[tvdog]]></dc:creator><pubDate>Tue, 21 Aug 2007 13:47:20 GMT</pubDate></item></channel></rss>