<?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[Import einer C++ dll in C]]></title><description><![CDATA[<p>Moin,</p>
<p>habe hier ein kleines Programm (VS 7.0) das eine Funktion aus einer dll verwendet. Die dll ist in C++ geschrieben. Übersetzte ich mein Programm als C++ Code funktioniert alles, als C Code findet er die Funktion in der dll nicht (error LNK2019: Nicht aufgeloestes externes Symbol...).</p>
<p>Im Programm bzw. Projekt ist folgendes gemacht:</p>
<p>- Die .lib meiner dll im Linker angegeben und ins Projektverzeichnis gelegt<br />
- Die Funktion aus der dll definiert mit &quot;__declspec(dllimport) int ....&quot;</p>
<p>Wo liegt der Hund begraben? Ist die Definition der Funktion mit &quot;__declspec(dllimport) int ...&quot; falsch? Liegt das Problem in der .lib? Oder kann das überhaupt nicht gehen?</p>
<p>Ich brauche natürlich den Aufruf aus einem C Programm. Und nein die dll auf C umstellen geht auch nicht <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>Danke und Gruß,</p>
<p>Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170445/import-einer-c-dll-in-c</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 05:13:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170445.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Jan 2007 09:39:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 09:39:23 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>habe hier ein kleines Programm (VS 7.0) das eine Funktion aus einer dll verwendet. Die dll ist in C++ geschrieben. Übersetzte ich mein Programm als C++ Code funktioniert alles, als C Code findet er die Funktion in der dll nicht (error LNK2019: Nicht aufgeloestes externes Symbol...).</p>
<p>Im Programm bzw. Projekt ist folgendes gemacht:</p>
<p>- Die .lib meiner dll im Linker angegeben und ins Projektverzeichnis gelegt<br />
- Die Funktion aus der dll definiert mit &quot;__declspec(dllimport) int ....&quot;</p>
<p>Wo liegt der Hund begraben? Ist die Definition der Funktion mit &quot;__declspec(dllimport) int ...&quot; falsch? Liegt das Problem in der .lib? Oder kann das überhaupt nicht gehen?</p>
<p>Ich brauche natürlich den Aufruf aus einem C Programm. Und nein die dll auf C umstellen geht auch nicht <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>Danke und Gruß,</p>
<p>Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210577</guid><dc:creator><![CDATA[99turbo]]></dc:creator><pubDate>Tue, 16 Jan 2007 09:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 10:34:23 GMT]]></title><description><![CDATA[<p>Wieso willst du überhaupt dein Projekt in C schreiben? Du kannst doch bei C++ bleiben..</p>
<p>Aber um zu deinem Problem zu kommen, hast du es schon mit LoadLibrary und GetProcAdress versucht? Da sollte sich auch was zu in der MSDN finden lassen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210612</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Tue, 16 Jan 2007 10:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 10:41:35 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>danke erstmal. Nein das Programm nach C++ zum zustricken kommt nur als allerletzte Lösung in Frage. Ist wahrscheinlich auch gar nicht möglich da ich in dem Programm ein API verwende für die der Hersteller nur C als Entwicklungssprache unterstützt.</p>
<p>Mit LoadLibrary und GetProcAdress hab ich noch nicht probiert - Hast jemand ein einfaches Beispiel?</p>
<p>Mein Hauptverdacht ist eigentlich, dass man eine .lib für C braucht. Die ich habe wird wahrscheinlich für C++ sein. Kann das jemand bestätigen? Wie kann ich die .lib für C erzeugen?</p>
<p>Danke und Gruß,</p>
<p>Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210617</guid><dc:creator><![CDATA[99turbo]]></dc:creator><pubDate>Tue, 16 Jan 2007 10:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 10:47:46 GMT]]></title><description><![CDATA[<p>Ich kenne mich mit dem Thema nicht aus, aber soweit ich weiß, sollte es auch in C ein einfacher Aufruf von LoadLibrary tun:</p>
<pre><code class="language-cpp">HINSTANCE hDll = LoadLibrary(&quot;NAME-DER-DLL&quot;);
</code></pre>
<p>Hab gerade mal in der MSDN geschaut:<br />
<a href="http://msdn2.microsoft.com/en-us/library/64tkc9y5(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/64tkc9y5(VS.80).aspx</a></p>
<p>da solltest du was finden.</p>
<p>Du brauchst natürlich dann</p>
<pre><code class="language-cpp">#include&lt;windows.h&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1210620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210620</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Tue, 16 Jan 2007 10:47:46 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 10:49:12 GMT]]></title><description><![CDATA[<p>C++ ist (naja fast) eine Erweiterung von C, also kannst du nahezu alle Sachen, die du in C machen konntest, auch noch in C++ erledigen (insbesondere ist es kein Problem, eine C-API in einem C++-Programm zu verwenden<sup>*</sup>).</p>
<p><sup>*</sup> du mußt nur wissen, wie die Funktionen angesprochen werden müssen - und eventuell die Umwandlung zwischen C-Daten und C++-Daten (z.B. char* vs. std::string) kapseln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210621</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 Jan 2007 10:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 12:45:48 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>C++ ist (naja fast) eine Erweiterung von C, also kannst du nahezu alle Sachen, die du in C machen konntest, auch noch in C++ erledigen (insbesondere ist es kein Problem, eine C-API in einem C++-Programm zu verwenden<sup>*</sup>).</p>
<p><sup>*</sup> du mußt nur wissen, wie die Funktionen angesprochen werden müssen - und eventuell die Umwandlung zwischen C-Daten und C++-Daten (z.B. char* vs. std::string) kapseln.</p>
</blockquote>
<p>Okay. Wie gesagt wenn alle Stricke reißen. Ich fürchte nur das ist deutlich mehr Aufwand.</p>
<p>Gruß Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210731</guid><dc:creator><![CDATA[99turbo]]></dc:creator><pubDate>Tue, 16 Jan 2007 12:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 12:47:36 GMT]]></title><description><![CDATA[<p>SALOMON schrieb:</p>
<blockquote>
<p>Ich kenne mich mit dem Thema nicht aus, aber soweit ich weiß, sollte es auch in C ein einfacher Aufruf von LoadLibrary tun:</p>
<pre><code class="language-cpp">HINSTANCE hDll = LoadLibrary(&quot;NAME-DER-DLL&quot;);
</code></pre>
<p>Hab gerade mal in der MSDN geschaut:<br />
<a href="http://msdn2.microsoft.com/en-us/library/64tkc9y5(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/64tkc9y5(VS.80).aspx</a></p>
<p>da solltest du was finden.</p>
</blockquote>
<p>Hmm, ist halt ein anderer Weg. Funktioniert im Moment nicht da ich keine .def Datei habe. Danke für den Link</p>
<p>Gruß Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210732</guid><dc:creator><![CDATA[99turbo]]></dc:creator><pubDate>Tue, 16 Jan 2007 12:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 12:54:03 GMT]]></title><description><![CDATA[<p>Die .def Datei sollte kein Problem sein. Du musst nur eine leere .def Datei erstellen und in den Projekteigenschaften des Linkers die def Datei einstellen und fertig.</p>
<p>Aber abgesehen davon, würde ich meine Applikation auch eher mit C++ erstellen als mit C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210733</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Tue, 16 Jan 2007 12:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 13:47:36 GMT]]></title><description><![CDATA[<p>SALOMON schrieb:</p>
<blockquote>
<p>Die .def Datei sollte kein Problem sein. Du musst nur eine leere .def Datei erstellen und in den Projekteigenschaften des Linkers die def Datei einstellen und fertig.</p>
</blockquote>
<p>Na leer sollte sie nicht sein oder? Da muss schon was drinstehen.</p>
<pre><code>LIBRARY   TestDLL
EXPORTS
   Get_Test   @1
</code></pre>
<p>hab ich mal erstellt. Wo gebe ich die den im Linker an?</p>
<p>SALOMON schrieb:</p>
<blockquote>
<p>Aber abgesehen davon, würde ich meine Applikation auch eher mit C++ erstellen als mit C.</p>
</blockquote>
<p>das hat man davon wenn man im C++ forum fragt <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>Danke und Gruß,</p>
<p>Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210775</guid><dc:creator><![CDATA[99turbo]]></dc:creator><pubDate>Tue, 16 Jan 2007 13:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 13:55:55 GMT]]></title><description><![CDATA[<p>Ja immerhin ist C++ eine Weiterentwicklung von C.</p>
<p>Ich hab Visual Studios gerade nicht da, aber du solltest es da finden:<br />
Rechtsklick auf dein Projekt im Projektmappenexplorer =&gt; Eigenschaften =&gt; Linker.</p>
<p>Da einfach nach &quot;Moduldefinition&quot; (Deutsche Version) suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210789</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Tue, 16 Jan 2007 13:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 13:56:47 GMT]]></title><description><![CDATA[<p>ist die Funktion als extern &quot;C++&quot; deklariert? Bzw. besser wäre, wenn du sie als extern &quot;C&quot; exportierst und für cpp programm auch mit extern &quot;C&quot; importierst.<br />
Also sowas:</p>
<pre><code class="language-cpp">#ifdef ICH_EXPORTIERE
#define MEINEAPI  __declspec(dllexport)
#else  // sonst import
#define MEINEAPI  __declspec(dllimport)
#endif
#ifdef __cplusplus
extern &quot;C&quot;
{
#endif
    MEINEAPI  void foo(void);
    MEINEAPI  void bar(void);
#ifdef __cplusplus
}
#endif
</code></pre>
<p>MfG<br />
DDR-RAM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210790</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Tue, 16 Jan 2007 13:56:47 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 14:01:16 GMT]]></title><description><![CDATA[<p>Ja kann auch sein, ich kenne mich damit nicht aus.</p>
<p>Ich habe daber trotzdem bei Google mal danach gesucht ('extern &quot;C&quot;') und das erste, was ich fand war das:</p>
<blockquote>
<p>Und noch eine Anwendung für die Speicherklasse extern. Eine besondere Form der extern-Anweisung ist die Anweisung extern &quot;C&quot;. Wollen Sie von einem C++ Programm aus auf Funktionen zugreifen, die mit einem C-Compiler (nicht C++ Compiler!) übersetzt worden sind, so müssen Sie diese Funktionen als extern &quot;C&quot; Funktionen kennzeichnen.</p>
</blockquote>
<p>Also sollte das nicht funktionieren, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210797</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Tue, 16 Jan 2007 14:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to Import einer C++ dll in C on Tue, 16 Jan 2007 14:16:04 GMT]]></title><description><![CDATA[<p>pfff.</p>
<p>gelöst.</p>
<p>Ich musste nur noch aus der obigen .def mit lib /DEF:testdll.def eine neue lib bauen dann ging der ganzen Rotz (wie in meinem ersten Post beschrieben).</p>
<p>Ich vermute es ist weniger C/C++ spezifisch sondern hängt am Compiler (die DLL ist mit 6.0, meine App mit 7.0 übersetzt).</p>
<p>Danke an Alle!</p>
<p>Gruß Ralf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210804</guid><dc:creator><![CDATA[99turbo]]></dc:creator><pubDate>Tue, 16 Jan 2007 14:16:04 GMT</pubDate></item></channel></rss>