<?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[Funktion per def-File exportieren]]></title><description><![CDATA[<p>Hallo!<br />
Ich krieg es einfach nicht hin meine DLL-Funktionen per def-File zu exportieren, mit __declspec(dllexport) hingegen klappts super. Das ganz lässt sich auf ganz wenig Code reduzieren:</p>
<p>.cpp Datei</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

void Func() {
    MessageBox(NULL, &quot;Func&quot;, NULL, MB_OK);
}
</code></pre>
<p>.def Datei</p>
<pre><code>LIBRARY NurZumTest

EXPORTS
        Func    @1
</code></pre>
<p>Ist da irgendwo ein Fehler drin? Ich habe die .def Datei einfach zu den Quellcode Dateien hinzugefügt. Ich hab irgendwie das Gefühl das er die def-Datei ignoriert. Auch wenn ich da irgendeinen Müll reinschreibe kommen keine Warnungen/Fehler. Bitte helft mir. <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/15684/funktion-per-def-file-exportieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 13:32:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/15684.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Dec 2002 07:36:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion per def-File exportieren on Sat, 14 Dec 2002 07:36:00 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich krieg es einfach nicht hin meine DLL-Funktionen per def-File zu exportieren, mit __declspec(dllexport) hingegen klappts super. Das ganz lässt sich auf ganz wenig Code reduzieren:</p>
<p>.cpp Datei</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

void Func() {
    MessageBox(NULL, &quot;Func&quot;, NULL, MB_OK);
}
</code></pre>
<p>.def Datei</p>
<pre><code>LIBRARY NurZumTest

EXPORTS
        Func    @1
</code></pre>
<p>Ist da irgendwo ein Fehler drin? Ich habe die .def Datei einfach zu den Quellcode Dateien hinzugefügt. Ich hab irgendwie das Gefühl das er die def-Datei ignoriert. Auch wenn ich da irgendeinen Müll reinschreibe kommen keine Warnungen/Fehler. Bitte helft mir. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/85067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/85067</guid><dc:creator><![CDATA[Early]]></dc:creator><pubDate>Sat, 14 Dec 2002 07:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion per def-File exportieren on Sat, 14 Dec 2002 08:50:00 GMT]]></title><description><![CDATA[<p>Schreib mal extern &quot;C&quot; vor den Funktionsnamen.</p>
<pre><code class="language-cpp">extern &quot;C&quot; void Func(){ /* ... */ }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/85068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/85068</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 14 Dec 2002 08:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion per def-File exportieren on Sat, 14 Dec 2002 09:15:00 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis cd9000 <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="🙂"
    /> , aber war es leider nicht, aber ich hab's gerade trotzdem herausgefunden. Hatte nur ein Problem mit meinem Compiler. <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="🙂"
    /><br />
Irgendwie musste man das def file bei Visual C++ 7 explizit in den Linkeroptionen einstellen, es ging nicht durch einfaches Hinzüfügen zu den Quellcode Dateien. Soweit ich mich erinnern kann war das bei Visual C++ 6 nicht so, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/85069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/85069</guid><dc:creator><![CDATA[Early]]></dc:creator><pubDate>Sat, 14 Dec 2002 09:15:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion per def-File exportieren on Sat, 14 Dec 2002 09:18:00 GMT]]></title><description><![CDATA[<p>Nein, bei VisualC++ 6 reicht es die def-datei zu den Quellcodedateien hinzuzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/85070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/85070</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 14 Dec 2002 09:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion per def-File exportieren on Sat, 14 Dec 2002 09:29:00 GMT]]></title><description><![CDATA[<p>Jo, vielen Dank! Hatte mich echt gewundert. Warum müssen die bloß alles ändern? :p<br />
Falls es noch jemanden interessiert, die def-Datei muss unter folgendem Option eingestellt werden:</p>
<p>Projektoptionen -&gt; Linker -&gt; Eingabe -&gt; Moduldefinition</p>
<p>ciao, Early <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/85071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/85071</guid><dc:creator><![CDATA[Early]]></dc:creator><pubDate>Sat, 14 Dec 2002 09:29:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion per def-File exportieren on Sat, 14 Dec 2002 15:42:00 GMT]]></title><description><![CDATA[<p>Ok, mit einzelnen Funktionen klappt es jetzt. Aber bei C++ Klassen bekomme ich es noch nicht hin. Mit __declspec(dllexport) klappt's wie immer bestens, nur per def-file wieder 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>Das Sourcefile sieht erstmal so aus:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

class CTest {
public:
    void DoNothing() {
        Sleep(5000);
    }
};
</code></pre>
<p>Dann habe ich einmal mit __declspec(dllexport) kompiliert und im DependencyWalker geöffnet, um an den Namen der Methode zu kommen. Ergebnis:</p>
<p>?DoNothing@CTest@@QAEXXZ</p>
<p>Soweit so gut. Dann hab ich das __declspec(dllexport) wieder entfernt um die Methode jetzt per def-file zu exportieren. Also das ganze ins def-file:</p>
<pre><code>LIBRARY NurZumTest
EXPORTS
?DoNothing@CTest@@QAEXXZ
</code></pre>
<p>Aber beim kompilieren kommt dann folgender Fehler. <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>
<p>NurZumTest error LNK2001: Nichtaufgeloestes externes Symbol &quot;public: void __thiscall CTest::DoNothing(void)&quot; (?DoNothing@CTest@@QAEXXZ)</p>
<p>Ich find den Fehler einfach nicht. Das es funktionieren muss, weiss ich aber. Die MFC Bibliothek exportiert ihre Klassen auch über ein def-file.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/85072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/85072</guid><dc:creator><![CDATA[Early]]></dc:creator><pubDate>Sat, 14 Dec 2002 15:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion per def-File exportieren on Thu, 26 Apr 2007 13:39:14 GMT]]></title><description><![CDATA[<p>Early schrieb:</p>
<blockquote>
<p>Ok, mit einzelnen Funktionen klappt es jetzt. Aber bei C++ Klassen bekomme ich es noch nicht hin. Mit __declspec(dllexport) klappt's wie immer bestens, nur per def-file wieder 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>Das Sourcefile sieht erstmal so aus:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

class CTest {
public:
    void DoNothing() {
        Sleep(5000);
    }
};
</code></pre>
<p>Dann habe ich einmal mit __declspec(dllexport) kompiliert und im DependencyWalker geöffnet, um an den Namen der Methode zu kommen. Ergebnis:</p>
<p>?DoNothing@CTest@@QAEXXZ</p>
<p>Soweit so gut. Dann hab ich das __declspec(dllexport) wieder entfernt um die Methode jetzt per def-file zu exportieren. Also das ganze ins def-file:</p>
<pre><code>LIBRARY NurZumTest
EXPORTS
?DoNothing@CTest@@QAEXXZ
</code></pre>
<p>Aber beim kompilieren kommt dann folgender Fehler. <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>
<p>NurZumTest error LNK2001: Nichtaufgeloestes externes Symbol &quot;public: void __thiscall CTest::DoNothing(void)&quot; (?DoNothing@CTest@@QAEXXZ)</p>
<p>Ich find den Fehler einfach nicht. Das es funktionieren muss, weiss ich aber. Die MFC Bibliothek exportiert ihre Klassen auch über ein def-file.</p>
</blockquote>
<p>Klassen können nicht per *.def Datei (welche eigentlich nur notwendig ist, wenn man an funktionen der dll per GetProcAddress rankommen möchte) exportiert werden.</p>
<p>Du kannst dir aber eine sogenannte Factory funktion erstellen, welche dir ein objekt der Klasse erzeugt und einen zeiger darauf zurückliefert.<br />
z.b.</p>
<pre><code class="language-cpp">CWin32Dll* CreateInstance()
{
    return new CWin32Dll();
}
</code></pre>
<p>Eventuell ist es noch sinnvoll eine 2. Funktion zu exportieren, welche das Objekt, das du über die Factory Funktion bekommen hast, wieder im DLL Context zerstört<br />
z.b.</p>
<pre><code class="language-cpp">void Destroy(CWin32Dll* pInstance)
{
    delete pInstance;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1273994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273994</guid><dc:creator><![CDATA[ss]]></dc:creator><pubDate>Thu, 26 Apr 2007 13:39:14 GMT</pubDate></item></channel></rss>