<?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[DLLs linken: statisch? dynamisch?]]></title><description><![CDATA[<p>Ich verwende in einem Projekt 2 DLLs. Diese habe ich statisch eingefügt, indem ich eine .lib und die Headerdatei dem Projekt hinzugefügt habe. Und wie erwartet, lässt sich das fertige Programm nicht starten, wenn am Zielsystem die DLLs fehlen. Was mir nicht wirklich gefällt. Hätte es lieber so, dass dann z.B. alle Buttons, deren Routine eine Funktion aus einer fehlenden DLL aufrufen, deaktiviert werden. (Hier geht es übrigens jetzt nicht darum, wie ich Buttons deaktiviere. :p)</p>
<p>Nun, das sieht wohl so aus, als sollte ich lieber mit LoadLibrary und so die DLLs dynamisch linken. Nur müsste ich so anscheinend zu jeder (benötigten) Funktion der DLL einen Funktionszeiger erstellen. Obwohl ich doch schon die Headerdatei habe. Lasse ich die aber im Projekt drin, gibts Linkerfehler. Gibt es da eine Möglichkeit?</p>
<p><em>Edit:</em> Die Headerdatei im Projekt zu haben, macht doch keine Probleme. Der Linkerfehler kommt, weil die Funktionen verwendet werden. Mein Problem liegt jetzt dabei, den Funktionsköpfen die Funktionen aus der DLL zuzuweisen. Wenn ich dem Funktionsnamen das Ergebnis von GetProcAddress zuweisen will, bringt er einen &quot;L-Wert erwartet&quot; - Fehler.</p>
<pre><code class="language-cpp">//Header-Datei:
extern &quot;C&quot; int __stdcall IK220Init(Word Axis);

//cpp
HINSTANCE h = LoadLibraryA(&quot;IK220dll.dll&quot;);
IK220Init = GetProcAddress(h,&quot;IK220Init&quot;);//L-Wert erwartet
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/106857/dlls-linken-statisch-dynamisch</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 08:14:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/106857.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Apr 2005 05:12:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLLs linken: statisch? dynamisch? on Thu, 14 Apr 2005 06:25:50 GMT]]></title><description><![CDATA[<p>Ich verwende in einem Projekt 2 DLLs. Diese habe ich statisch eingefügt, indem ich eine .lib und die Headerdatei dem Projekt hinzugefügt habe. Und wie erwartet, lässt sich das fertige Programm nicht starten, wenn am Zielsystem die DLLs fehlen. Was mir nicht wirklich gefällt. Hätte es lieber so, dass dann z.B. alle Buttons, deren Routine eine Funktion aus einer fehlenden DLL aufrufen, deaktiviert werden. (Hier geht es übrigens jetzt nicht darum, wie ich Buttons deaktiviere. :p)</p>
<p>Nun, das sieht wohl so aus, als sollte ich lieber mit LoadLibrary und so die DLLs dynamisch linken. Nur müsste ich so anscheinend zu jeder (benötigten) Funktion der DLL einen Funktionszeiger erstellen. Obwohl ich doch schon die Headerdatei habe. Lasse ich die aber im Projekt drin, gibts Linkerfehler. Gibt es da eine Möglichkeit?</p>
<p><em>Edit:</em> Die Headerdatei im Projekt zu haben, macht doch keine Probleme. Der Linkerfehler kommt, weil die Funktionen verwendet werden. Mein Problem liegt jetzt dabei, den Funktionsköpfen die Funktionen aus der DLL zuzuweisen. Wenn ich dem Funktionsnamen das Ergebnis von GetProcAddress zuweisen will, bringt er einen &quot;L-Wert erwartet&quot; - Fehler.</p>
<pre><code class="language-cpp">//Header-Datei:
extern &quot;C&quot; int __stdcall IK220Init(Word Axis);

//cpp
HINSTANCE h = LoadLibraryA(&quot;IK220dll.dll&quot;);
IK220Init = GetProcAddress(h,&quot;IK220Init&quot;);//L-Wert erwartet
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/766238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/766238</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Thu, 14 Apr 2005 06:25:50 GMT</pubDate></item><item><title><![CDATA[Reply to DLLs linken: statisch? dynamisch? on Thu, 14 Apr 2005 08:26:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Du musst über ein typedef einen Typen auf diese Funktion erstellen. Dann eine Variable als Pointer auf diesen Typ erstellen und dieser Variablen dann den Pointer den GetProcAddress liefert zuweisen. Den Pointer von GetProcAddress musst du natürlich zu diesen Typ casten (reinterpret_cast). Desweiteren sollte man nicht vergessen zu prüfen ob die dll wirklich geladen wurde ( h != 0) und ob die Funktion dort gefunden wurde (Ergebnis von GetProcAddress != 0).<br />
Im <a href="http://bcb-tutorial.c-plusplus.net/index_old.html" rel="nofollow">BCB-Tutorial</a> findest du mehr zu diesem Thema.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/766310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/766310</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 14 Apr 2005 08:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to DLLs linken: statisch? dynamisch? on Thu, 14 Apr 2005 08:45:26 GMT]]></title><description><![CDATA[<p>Danke! Aber das Erstellen der typedefs war genau das, was ich vermeiden wollte. Weil ich ja gehofft hatte, dass ich irgendwie die Dinger aus der Headerdatei nehmen könnte.</p>
<p>Ich habe es aber jetzt trotzdem so gemacht. Lauter alberne typedefs gemacht. Geht wohl nicht anders. Schade.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/766328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/766328</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Thu, 14 Apr 2005 08:45:26 GMT</pubDate></item></channel></rss>