<?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[DLL-Methode mit Übergabeparametern]]></title><description><![CDATA[<p>Nach längerer Pause hab ich mal wieder ein Problem.</p>
<p>Ich hab in meiner Projektmappe ein MFC-DLL-Projekt und ein &quot;normales&quot; MFC-EXE-Projekt</p>
<p>In der DLL habe ich folgende Methode implementiert:</p>
<pre><code class="language-cpp">extern &quot;C&quot; AFX_EXT_CLASS IElement* CreateElement() {
  return new CElement();
}
typedef IElement* (CALLBACK* LPFNCreate)();
</code></pre>
<p>In meinen Programm hole ich mir nun über</p>
<pre><code class="language-cpp">LPFNCreate lpfnCreate = (LPFNCreate ) GetProcAddress(hDLL, &quot;CreateElement&quot;);
</code></pre>
<p>die Methode... Und führe diese aus...</p>
<p>So weit so gut läuft das auch alles. Nun habe ich aber ein Problem. Wenn ich meine Methode in der DLL um einen Übergabeparameter erweitere:</p>
<pre><code class="language-cpp">extern &quot;C&quot; AFX_EXT_CLASS IElement* CreateElement(int iSize) {
  return new CElement();
}
typedef IElement* (CALLBACK* LPFNCreate)(int);
</code></pre>
<p>So compiliert der Compiler einwandfrei, beim Ausführen kommt jedoch folgende Meldung:</p>
<p>&quot;Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.&quot;</p>
<p>Und zwar genau an der Stelle wo ich die Methode</p>
<pre><code class="language-cpp">LPFNCreate lpfnCreate = (LPFNCreate ) GetProcAddress(hDLL, &quot;CreateElement&quot;);
lpfnCreate(5);
</code></pre>
<p>aufrufe. Wieso?! Was ist denn daran falsch...</p>
<p>Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177841/dll-methode-mit-übergabeparametern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 12:05:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177841.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Apr 2007 16:19:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL-Methode mit Übergabeparametern on Wed, 04 Apr 2007 16:19:11 GMT]]></title><description><![CDATA[<p>Nach längerer Pause hab ich mal wieder ein Problem.</p>
<p>Ich hab in meiner Projektmappe ein MFC-DLL-Projekt und ein &quot;normales&quot; MFC-EXE-Projekt</p>
<p>In der DLL habe ich folgende Methode implementiert:</p>
<pre><code class="language-cpp">extern &quot;C&quot; AFX_EXT_CLASS IElement* CreateElement() {
  return new CElement();
}
typedef IElement* (CALLBACK* LPFNCreate)();
</code></pre>
<p>In meinen Programm hole ich mir nun über</p>
<pre><code class="language-cpp">LPFNCreate lpfnCreate = (LPFNCreate ) GetProcAddress(hDLL, &quot;CreateElement&quot;);
</code></pre>
<p>die Methode... Und führe diese aus...</p>
<p>So weit so gut läuft das auch alles. Nun habe ich aber ein Problem. Wenn ich meine Methode in der DLL um einen Übergabeparameter erweitere:</p>
<pre><code class="language-cpp">extern &quot;C&quot; AFX_EXT_CLASS IElement* CreateElement(int iSize) {
  return new CElement();
}
typedef IElement* (CALLBACK* LPFNCreate)(int);
</code></pre>
<p>So compiliert der Compiler einwandfrei, beim Ausführen kommt jedoch folgende Meldung:</p>
<p>&quot;Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.&quot;</p>
<p>Und zwar genau an der Stelle wo ich die Methode</p>
<pre><code class="language-cpp">LPFNCreate lpfnCreate = (LPFNCreate ) GetProcAddress(hDLL, &quot;CreateElement&quot;);
lpfnCreate(5);
</code></pre>
<p>aufrufe. Wieso?! Was ist denn daran falsch...</p>
<p>Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1259376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259376</guid><dc:creator><![CDATA[Jogilein]]></dc:creator><pubDate>Wed, 04 Apr 2007 16:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to DLL-Methode mit Übergabeparametern on Wed, 04 Apr 2007 19:46:36 GMT]]></title><description><![CDATA[<p>Dann deklariere die Funktion CreateElement in der DLL auch als CALLBACK!</p>
<p>Vermutlich wird hier _stdcall verwendet!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1259548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259548</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 04 Apr 2007 19:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to DLL-Methode mit Übergabeparametern on Thu, 05 Apr 2007 07:51:13 GMT]]></title><description><![CDATA[<p>Und wiedermal bin ich dir zu ewigem Dank verpflichtet :)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1259778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259778</guid><dc:creator><![CDATA[Jogilein]]></dc:creator><pubDate>Thu, 05 Apr 2007 07:51:13 GMT</pubDate></item></channel></rss>