<?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[Funktionsnamen in DLLs?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine DLL mit Funktionen geschrieben und möchte diese dynamisch einbinden:</p>
<p>DLL.cpp</p>
<pre><code class="language-cpp">#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------

extern &quot;C&quot; __declspec(dllexport) void showForm()
{
 TForm2* Form2 = new TForm2(NULL);

 Form2-&gt;Edit1-&gt;Parent = Form2;
 Form2-&gt;Button1-&gt;Parent = Form2;

 Form2-&gt;Show();
}

extern &quot;C&quot; __declspec(dllexport) void test()
{
 ShowMessage(&quot;TEST&quot;);
}
</code></pre>
<p>Schnittstellenheader.h(Unit3.h)</p>
<pre><code class="language-cpp">#ifndef Unit3H
#define Unit3H
#include &lt;windows&gt;
using namespace std;
void ShowIt()
{
 typedef void(__stdcall *pFunc)();
 pFunc DLLFUNCTION;
 HINSTANCE h = LoadLibrary(&quot;Project2.dll&quot;);

 if(h)
    {
     DLLFUNCTION = (pFunc)GetProcAddress(h,&quot;test&quot;);
     if(DLLFUNCTION)
      DLLFUNCTION();
     else  {}
      ShowMessage(&quot;Funktion existiert nicht&quot;);
    }
 else{}
  ShowMessage(&quot;DLL konnte nicht geladen werden&quot;);
}
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>Ausführendes Programm</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Main.h&quot;
#include &quot;Unit3.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowIt();       
}
//---------------------------------------------------------------------------
</code></pre>
<p>beim ausführen wird immer gesagt, das Funktion nicht existiert!Wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171521/funktionsnamen-in-dlls</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 05:24:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171521.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Jan 2007 08:38:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 08:38:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine DLL mit Funktionen geschrieben und möchte diese dynamisch einbinden:</p>
<p>DLL.cpp</p>
<pre><code class="language-cpp">#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------

extern &quot;C&quot; __declspec(dllexport) void showForm()
{
 TForm2* Form2 = new TForm2(NULL);

 Form2-&gt;Edit1-&gt;Parent = Form2;
 Form2-&gt;Button1-&gt;Parent = Form2;

 Form2-&gt;Show();
}

extern &quot;C&quot; __declspec(dllexport) void test()
{
 ShowMessage(&quot;TEST&quot;);
}
</code></pre>
<p>Schnittstellenheader.h(Unit3.h)</p>
<pre><code class="language-cpp">#ifndef Unit3H
#define Unit3H
#include &lt;windows&gt;
using namespace std;
void ShowIt()
{
 typedef void(__stdcall *pFunc)();
 pFunc DLLFUNCTION;
 HINSTANCE h = LoadLibrary(&quot;Project2.dll&quot;);

 if(h)
    {
     DLLFUNCTION = (pFunc)GetProcAddress(h,&quot;test&quot;);
     if(DLLFUNCTION)
      DLLFUNCTION();
     else  {}
      ShowMessage(&quot;Funktion existiert nicht&quot;);
    }
 else{}
  ShowMessage(&quot;DLL konnte nicht geladen werden&quot;);
}
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>Ausführendes Programm</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Main.h&quot;
#include &quot;Unit3.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowIt();       
}
//---------------------------------------------------------------------------
</code></pre>
<p>beim ausführen wird immer gesagt, das Funktion nicht existiert!Wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217363</guid><dc:creator><![CDATA[Gibts_das_wirklich..]]></dc:creator><pubDate>Fri, 26 Jan 2007 08:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 08:51:30 GMT]]></title><description><![CDATA[<p>Erstens sind die Klammern {} hinter den beiden else-Anweisungen überflüssig. Das ist eine NOOP-Anweisung und beendet das if-else - mit dem Ergebnis, daß die anschließenden ShowMessage()-Aufrufe nach dem if() ausgeführt werden, egal wie der Test ausgegangen ist.</p>
<p>Zweitens: Kommt denn nur die &quot;Nicht gefunden&quot; Meldung oder kommen zwei Nachrichten &quot;TEST&quot; und &quot;Funktion nicht gefunden&quot;? (im ersteren Fall solltest du dich etwas mit Name Mangling beschäftigen, im letzteren Fall lag es tatsächlich an den überflüssigen Klammern)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217368</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 26 Jan 2007 08:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 08:53:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Durch extern C wird der Funktionsname mit einem &quot;_&quot; erweitert</p>
<pre><code class="language-cpp">DLLFUNCTION = (pFunc)GetProcAddress(h,&quot;_test&quot;);
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217369</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 26 Jan 2007 08:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 09:08:10 GMT]]></title><description><![CDATA[<p>ja die klammern habe ich behoben, und den habe es in &quot;__test&quot; geändert!</p>
<p>Es kommt immernoch NUR die Meldung, das die Funktion nicht existiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217377</guid><dc:creator><![CDATA[Gibts_das_wirklich..]]></dc:creator><pubDate>Fri, 26 Jan 2007 09:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 09:11:09 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich meinte &quot;_test&quot;, nicht &quot;__test&quot;</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217378</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 26 Jan 2007 09:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 09:18:34 GMT]]></title><description><![CDATA[<p>ah danke akari, das wars! War von den beiden unterstrichen irgendwie geblendet <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>Ein frage habe ich trotzdem noch: Gibt es bei der funktion, welches die form anzeigt irgendwelche speicherlöcher beim schließen der form? oder wird hier der speicher ordentlich aufgeräumt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217383</guid><dc:creator><![CDATA[Gibts_das_wirklich..]]></dc:creator><pubDate>Fri, 26 Jan 2007 09:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsnamen in DLLs? on Fri, 26 Jan 2007 09:24:06 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ja, so wie es jetzt da steht, gibt es ein Speicherloch. Da du manuell new aufrufst und nichts als Owner übergibst, mus auch manuell delete aufgerufen werden.<br />
Das würde bei einem modalen Form noch sehr einfach gehen, bei deinem nichtmodalen aber geht das nicht so einfach.<br />
Am einfachsten ist es für dich, bei dem TForm2 noch den Event OnClose zu benutzen, um dort dem Action-Parameter den Wert caFree zu übergeben. So wird automatisch bei jedem Schließen des Fensters die Instanz sauber gelöscht.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217385</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 26 Jan 2007 09:24:06 GMT</pubDate></item></channel></rss>