<?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 aus fremder .dll aufrufen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine &quot;fremde&quot; .dll inklusive .h und .lib-Datei, aus der ich gerne eine Funktion aufrufen würde. Benutze Dev-C++ und habe erstmal die .h-Datei zu meinem Projekt und auch die .lib unter &quot;Linker&quot; hinzugefügt.</p>
<p>Habe nun folgendes geschrieben, um die Funktion &quot;TwGetDllVersion&quot; aufzurufen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
extern &quot;C&quot; __declspec(dllimport) double TwGetDllVersion(void);

int main(void){
double result = TwGetDllVersion();
printf (&quot;DLL hat Version &quot;, result);
return 0;
}
</code></pre>
<p>Kompilieren funktioniert, beim Ausführen kommt &quot;_.exe hat ein Problem festgestellt und muss beendet werden.&quot;</p>
<p>Was mache ich falsch? Bitte nicht steinigen, dass ich kein C++ kann, ich will nur die Funktion aufrufen und kein C++-Profi werden.</p>
<p>Beste Grüße<br />
minispect</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303455/funktion-aus-fremder-dll-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 11:08:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303455.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 May 2012 11:15:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 11:15:42 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine &quot;fremde&quot; .dll inklusive .h und .lib-Datei, aus der ich gerne eine Funktion aufrufen würde. Benutze Dev-C++ und habe erstmal die .h-Datei zu meinem Projekt und auch die .lib unter &quot;Linker&quot; hinzugefügt.</p>
<p>Habe nun folgendes geschrieben, um die Funktion &quot;TwGetDllVersion&quot; aufzurufen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
extern &quot;C&quot; __declspec(dllimport) double TwGetDllVersion(void);

int main(void){
double result = TwGetDllVersion();
printf (&quot;DLL hat Version &quot;, result);
return 0;
}
</code></pre>
<p>Kompilieren funktioniert, beim Ausführen kommt &quot;_.exe hat ein Problem festgestellt und muss beendet werden.&quot;</p>
<p>Was mache ich falsch? Bitte nicht steinigen, dass ich kein C++ kann, ich will nur die Funktion aufrufen und kein C++-Profi werden.</p>
<p>Beste Grüße<br />
minispect</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211346</guid><dc:creator><![CDATA[minispect]]></dc:creator><pubDate>Mon, 14 May 2012 11:15:42 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 11:20:33 GMT]]></title><description><![CDATA[<p>minispect schrieb:</p>
<blockquote>
<p>Was mache ich falsch?</p>
</blockquote>
<p>erster Fehler: Du benutzt keinen Debugger, um herauszufinden was schief läuft.<br />
zweiter Fehler: Du benutzt printf falsch.<br />
dritter fehler: Du benutzt printf.*</p>
<p>___________________<br />
* Ist nicht grundsätzlich ein Fehler, aber als Anfänger darf man sich sehr gerne erstmal auf die typsichere Variante mit Streams verlassen. printf kommt dann später, wenn man die Performance braucht. Ich will jetzt hier keine OT-Diskussion lostreten, die schon zigmal geführt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211349</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 14 May 2012 11:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 11:42:54 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>erster Fehler: Du benutzt keinen Debugger, um herauszufinden was schief läuft.</p>
</blockquote>
<p>Wenn ich den Debugger einschalte kommt ein Warning:<br />
&quot;An Access Violation (Segmentation Fault) raised in your program.&quot;</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>zweiter Fehler: Du benutzt printf falsch.</p>
</blockquote>
<p>Wäre</p>
<pre><code class="language-cpp">printf(&quot;Version ist: %.6f\n&quot;, result);
</code></pre>
<p>richtig?</p>
<p>Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211365</guid><dc:creator><![CDATA[minispect]]></dc:creator><pubDate>Mon, 14 May 2012 11:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 12:14:52 GMT]]></title><description><![CDATA[<p>Wenn du keinen Debugger benutzen möchtest, geht das mit mit Testausdrucken während des Programmlaufs auch. Noch besser ist ein Logfile &quot;test.txt&quot; geeignet. Einen solchen Logfile kann man sich bequem im Editor ansehen.</p>
<p>Nun zu pumuckls Vorschlag:</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;testgroesse   &quot; &lt;&lt; testgroesse &lt;&lt; endl; // Typ der Ausgabe ist egal!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2211372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211372</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 14 May 2012 12:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 12:23:22 GMT]]></title><description><![CDATA[<p>minispect schrieb:</p>
<blockquote>
<p>Wenn ich den Debugger einschalte kommt ein Warning:<br />
&quot;An Access Violation (Segmentation Fault) raised in your program.&quot;</p>
</blockquote>
<p>Jetzt musst du nurnoch rausfinden <em>wo</em> der Zugriffsfehler passiert, dann hast dus <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/2211376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211376</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 14 May 2012 12:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 13:21:27 GMT]]></title><description><![CDATA[<p>so, ich habe fprint jetzt durch berniebutts vorschlag ersetzt und den Debugger laufen lassen:</p>
<p>Die Access Violation tritt bei</p>
<pre><code class="language-cpp">double result = TwGetDllVersion();
</code></pre>
<p>auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211393</guid><dc:creator><![CDATA[minispect]]></dc:creator><pubDate>Mon, 14 May 2012 13:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 17:16:16 GMT]]></title><description><![CDATA[<p>Bist du sicher dass der Prototype passt?</p>
<p>Und (nur weil ich neugierig bin): steht das Tw vielleicht für TouchWare?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211429</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 May 2012 17:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 17:50:01 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Bist du sicher dass der Prototype passt?</p>
</blockquote>
<p>nein, nicht 100-prozentig. Hab das so aus der Header-Datei übernommen. Da steht:<br />
TW_DAQ_API double TwGetDllVersion(void);<br />
//returns the DLL version</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und (nur weil ich neugierig bin): steht das Tw vielleicht für TouchWare?</p>
</blockquote>
<p>Nein, Tw ist die Abkürzung der Firma, von der die dll stammt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211445</guid><dc:creator><![CDATA[minispect]]></dc:creator><pubDate>Mon, 14 May 2012 17:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 20:27:01 GMT]]></title><description><![CDATA[<p>Erm. Wieso verwendest du nicht gleich das Original-Header-File?</p>
<p>Ansonsten... guck mal als was TW_DAQ_API definiert ist.<br />
Vielleicht ist da noch ein <code>__stdcall</code> oder so mit drinnen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211535</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 May 2012 20:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 20:31:34 GMT]]></title><description><![CDATA[<p>Ist es nicht unter Windows so, dass Funktionen in DLLs immer als __stdcall definiert sein müssen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211540</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 14 May 2012 20:31:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Mon, 14 May 2012 23:05:01 GMT]]></title><description><![CDATA[<p>njet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211626</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 14 May 2012 23:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Tue, 15 May 2012 01:10:54 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ist es nicht unter Windows so, dass Funktionen in DLLs immer als __stdcall definiert sein müssen?</p>
</blockquote>
<p>Ist so Usus, aber Muss ist gar nix.<br />
Kannst auch <code>__cdecl</code> oder <code>__fastcall</code> machen oder <code>__super_new_calling_convention_that_only_my_compiler_supports</code> oder was auch immer.<br />
Und natürlich <code>__thiscall</code> , hätte ich bald vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211642</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 15 May 2012 01:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Tue, 15 May 2012 09:48:54 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab jetzt DependencyWalker benutzt und festgestellt, dass die Funktionen in der dll mit einem Unterstrich anfangen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;TofDaqDll.h&gt;
#include &lt;string&gt;

using namespace std;

typedef double (_stdcall *FNPTR)(void);

int main()
{
    HINSTANCE hinstLibrary = LoadLibrary(&quot;TofDaqDll.dll&quot;);
    FNPTR pFn;
    if (!hinstLibrary) {
              cout &lt;&lt; &quot;LoadLibrary failed: &quot; &lt;&lt; GetLastError() &lt;&lt; endl;
              return 1;
              }
 pFn=(FNPTR)GetProcAddress(hinstLibrary, &quot;_TwGetDllVersion&quot;);
 if (!pFn) {
            cout &lt;&lt; &quot;GetProcAddress failed: &quot; &lt;&lt; GetLastError()  &lt;&lt; endl;
            return 1;   
            }
            double result = pFn();
            cout &lt;&lt; result &lt;&lt; endl;
            FreeLibrary(hinstLibrary);
system(&quot;PAUSE&quot;);
return 0;
}
</code></pre>
<p>Das funktioniert soweit! <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="🙂"
    /> Vielen Dank für Eure Hilfe!</p>
<p>Die anderen Funktionen der dll haben eine Rückgabevariable &quot;TwRetVal&quot;. Wenn ich so eine Funktion aufrufe, bleibt das Programm beim Ausführen stehen. Wie gehe ich richtig mit diesem TwRetVal um?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211698</guid><dc:creator><![CDATA[minispect]]></dc:creator><pubDate>Tue, 15 May 2012 09:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Tue, 15 May 2012 10:50:23 GMT]]></title><description><![CDATA[<p>Dazu müsste man nun wissen was TwRetVal ist, nen?</p>
<p>BTW: du musst auch nix dynamisch laden, mach einfach so</p>
<pre><code class="language-cpp">// extern &quot;C&quot; __declspec(dllimport) double TwGetDllVersion(void);
extern &quot;C&quot; __declspec(dllimport) double __stdcall TwGetDllVersion(void);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2211727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211727</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 15 May 2012 10:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Tue, 15 May 2012 11:49:36 GMT]]></title><description><![CDATA[<p>darüber schweigt leider die dll-Beschreibung.</p>
<p>zum Befehl<br />
TW_DAQ_API TwRetVal TwStartAcquisiton(void);<br />
steht z.B.</p>
<p>Return value type: TwRetVal</p>
<p>Value kann z.B. TwAcquisitonActive, TwTimeout, TwSuccess, TwError sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211738</guid><dc:creator><![CDATA[minispect]]></dc:creator><pubDate>Tue, 15 May 2012 11:49:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion aus fremder .dll aufrufen on Tue, 15 May 2012 16:54:44 GMT]]></title><description><![CDATA[<p>Hast du ein Header-File zu der DLL?<br />
Ja?<br />
Dann steht da drin was <code>TwRetVal</code> für nen Typ hat.</p>
<p>Ich meine, irgendwoher musst du doch auch wissen was <code>TwAcquisitonActive, TwTimeout, TwSuccess, TwError</code> etc. sein sollen. Das werden ja wohl Symbolische Konstanten sein (=Zahlen), aber welcher Name für welche Zahl steht kannst du ja schwer erraten.</p>
<p>Und dort wo du die Zahlen zu den Namen findest, wirst du wohl auch finden was <code>TwRetVal</code> für ein Typ ist.</p>
<p>Und im Zweifelsfall halt <code>int</code> , nen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211830</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 15 May 2012 16:54:44 GMT</pubDate></item></channel></rss>