<?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[Formular unter DLL aufrufen]]></title><description><![CDATA[<p><strong>Hallo zusammen</strong>, ich hoffe mir kann jemand helfen mit meinem Problem. Ich suche nach einer Möglichkeit, wie ich unter Borland C++ Builder eine Klasse aus einer <strong>DLL</strong> an eine Anwendung übergeben kann. Um genauer zu sein, beinhaltet die DLL ein Formular das von einer Anwendung die dieses DLL lädt aufgerufen werden kann. Ich weis, dass das zur Verfügung stellen von Oberflächen durch DLLs nicht unbedingt üblich ist, trotzdem muss ich das so hinbekommen.<br />
Hat jemand etwas Zeit mir dabei zu helfen?<br />
*<br />
Mit freundlichen Grüßen<br />
coder24h<br />
*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144471/formular-unter-dll-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 22:35:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144471.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Apr 2006 16:19:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 16:19:54 GMT]]></title><description><![CDATA[<p><strong>Hallo zusammen</strong>, ich hoffe mir kann jemand helfen mit meinem Problem. Ich suche nach einer Möglichkeit, wie ich unter Borland C++ Builder eine Klasse aus einer <strong>DLL</strong> an eine Anwendung übergeben kann. Um genauer zu sein, beinhaltet die DLL ein Formular das von einer Anwendung die dieses DLL lädt aufgerufen werden kann. Ich weis, dass das zur Verfügung stellen von Oberflächen durch DLLs nicht unbedingt üblich ist, trotzdem muss ich das so hinbekommen.<br />
Hat jemand etwas Zeit mir dabei zu helfen?<br />
*<br />
Mit freundlichen Grüßen<br />
coder24h<br />
*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039943</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Tue, 18 Apr 2006 16:19:54 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 16:24:32 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>schau dir das Builder-Tutorial dieses Forums an, insbesondere diesen <a href="http://bcb-tutorial.c-plusplus.net/DLL_Tutorial/artikel11.html" rel="nofollow">Abschnitt</a>.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039945</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 18 Apr 2006 16:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 16:32:14 GMT]]></title><description><![CDATA[<p>Super! Ich werde das sofort ausprobieren!</p>
<p>Vielen, vielen Dank <strong>akari</strong>!<br />
<em>coder24h</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039956</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Tue, 18 Apr 2006 16:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 17:02:58 GMT]]></title><description><![CDATA[<p>Ich habe ein weiteres Problem: Die DLL sollte dabei explizit bzw. dynamisch geladen werden! So habe ich das Probiert, hat aber nicht funktioniert:</p>
<pre><code class="language-cpp">__declspec(dllimport) void FormShow(TComponent* Owner);

//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnLoadDLLClick(TObject *Sender)
{
	HINSTANCE h = LoadLibrary(&quot;TestDLL01.dll&quot;);
    if (!h)	ShowMessage(&quot;Die DLL 'TestDLL01.dll' konnte nicht geladen werden&quot;);
    else
    {
		FormShow(Application);
    }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Folgender Fehler wird ausgegeben:</p>
<pre><code class="language-cpp">[Linker Fehler] Unresolved external 'FormShow(Classes::TComponent *)' referenced from D:\C++\BORLAND C++ 6\TESTDLL01LOADER\UNITFRMMAIN.OBJ
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1039983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039983</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Tue, 18 Apr 2006 17:02:58 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 17:05:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du hast nun statisches und dynamisches Linken vermischt.<br />
Du must noch GetprocAddress benutzen, siehe <a href="http://bcb-tutorial.c-plusplus.net/DLL_Tutorial/artikel5.html" rel="nofollow">hier</a>.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039987</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 18 Apr 2006 17:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 19:02:06 GMT]]></title><description><![CDATA[<p>Ich bin die ganze Zeit am machen, kriege aber das Ganze nicht ans laufen. Hat vielleicht jemand ein fertiges Beispiel damit ich den mit meinem vergleichen kann?</p>
<p>In der DLL habe ich folgendes stehen:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
extern &quot;C&quot; __declspec (dllexport) void OpenForm(TComponent* Owner)
{
    TFormMain* FormMain = new TFormMain(Owner);
	FormMain-&gt;ShowModal();
}
</code></pre>
<p>In der Anwendung die diese DLL nutzt das hier:</p>
<pre><code class="language-cpp">typedef void TOpenForm(TComponent); // Typ für eine Funktion aus der DLL-Unit
void OpenForm(TComponent* Owner);

//---------------------------------------------------------------------------
void OpenForm(TComponent* Owner)
{
    TOpenForm* OpenForm; //Zeiger auf ein Funktionsdatentyp

    HINSTANCE h = LoadLibrary(&quot;TestDLL01.dll&quot;); //DLL wird bei Bedarf geladen

    if (h != 0)
    {
    	OpenForm = (TOpenForm*)GetProcAddress(h, &quot;_OpenForm&quot;);
        ShowMessage(&quot;DLL geladen&quot;);
    }
    if (OpenForm != NULL)
    {
        ShowMessage(&quot;Funktion ausgeführt&quot;);
        OpenForm(NULL);

    }
    //FreeLibrary(h);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1040060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040060</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Tue, 18 Apr 2006 19:02:06 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 19:43:04 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das Verlinkte Beispiel ist fertig.<br />
Bei dir muß das</p>
<pre><code class="language-cpp">void OpenForm(TComponent* Owner);
</code></pre>
<p>aus der Anwendung die die DLL nutzt raus.</p>
<p>Ansonsten :</p>
<blockquote>
<p>kriege aber das Ganze nicht ans laufen</p>
</blockquote>
<p>ist keine Ausreichende Fehelrbeschreibung!</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040078</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 18 Apr 2006 19:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 19:55:24 GMT]]></title><description><![CDATA[<p>Ich kann mir das nicht erklären und hoffte einfach nur, dass im diesen übersichtlichen Code der Fehler entdeckt wird. Ich kriege einfach die Anwendung nicht kompiliert:</p>
<p>Fehlermeldung:</p>
<pre><code class="language-cpp">[C++ Fehler] UnitFormMain.cpp(31): E2459 Klassen im VCL-Stil müssen mit dem Operator new erstellt werden
</code></pre>
<p>entsteht an der Stelle</p>
<pre><code class="language-cpp">OpenForm(NULL);
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040083</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Tue, 18 Apr 2006 19:55:24 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 19:57:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">typedef void TOpenForm(TComponent*);// Zeiger
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040087</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 18 Apr 2006 19:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 20:06:25 GMT]]></title><description><![CDATA[<p>Danke akari für deine tatkräftige Unterstützung! Jetzt bin ich zwar weiter es scheint aber noch nicht auszureichen.</p>
<p>Ich komme im diesen Block nie an:</p>
<pre><code class="language-cpp">if (OpenForm != NULL)
    {
        ShowMessage(&quot;Funktion ausgeführt&quot;);
        OpenForm(NULL);
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1040091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040091</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Tue, 18 Apr 2006 20:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Tue, 18 Apr 2006 20:18:08 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>dann stimmt der angegebene Name hier nicht</p>
<pre><code class="language-cpp">OpenForm = (TOpenForm*)GetProcAddress(h, &quot;_OpenForm&quot;);
</code></pre>
<p>las mal den Unterstrich weg.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040097</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 18 Apr 2006 20:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Wed, 19 Apr 2006 17:28:54 GMT]]></title><description><![CDATA[<p>Wenn ich meine DLL aus dem C++ Builder starte bzw. kompiliere, wird dabei automatisch die Anwendung die diese DLL nutzt aufgerufen. Diese Anwendung funktioniert dabei reibungslos!</p>
<p>Wenn ich jedoch die Anwendung selber ausführe, findet diese die Funktion <strong>OpenForm</strong> nicht! Ich habe scheinbar noch irgendwo einen Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p>Unter DLL:</p>
<pre><code class="language-cpp">#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
	return 1;
}

//---------------------------------------------------------------------------
extern &quot;C&quot; __declspec (dllexport) void OpenForm(TComponent* Owner)
{
    TFormMain* F = new TFormMain(Owner);
	F-&gt;ShowModal();
}
</code></pre>
<p>Unter Anwendung:</p>
<pre><code class="language-cpp">typedef void TOpenForm(TComponent* Owner); // Typ für eine Funktion aus der DLL-Unit

void OpenForm(TComponent* Owner)
{
    TOpenForm* OpenForm = NULL;  //Zeiger auf ein Funktionsdatentyp

    HINSTANCE h = LoadLibrary(&quot;TestDLL01.dll&quot;); //DLL wird bei Bedarf geladen

    if (h != 0)             // Prüfen ob die DLL geladen worden ist
    {
        OpenForm = (TOpenForm*)GetProcAddress(h, &quot;_OpenForm&quot;); // Zeiger auf die
                                                   // Funktion aus in der setzen
        ShowMessage(&quot;DLL geladen&quot;);
    }
    if (OpenForm != NULL)   // Prüfen ob der Zeiger auf eine Speicherstelle zeigt
    {
        ShowMessage(&quot;Funktion ausgeführt&quot;);
        OpenForm(NULL);     // Funktion aus der DLL ausführen
    }

   // FreeLibrary(h);         // Instance wieder freigeben, erst wenn
                              // nicht mehr benötigt

}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	OpenForm(NULL);         // Funktion ausführen
}
</code></pre>
<p>Kann hier jemand erkennen woher so ein Verhalten kommen kann?<br />
MfG coder24h<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040757</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Wed, 19 Apr 2006 17:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Wed, 19 Apr 2006 17:29:46 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>wird denn beim zweiten Fall überhaupt die DLL selber gefunden?</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040761</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 19 Apr 2006 17:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Wed, 19 Apr 2006 17:41:15 GMT]]></title><description><![CDATA[<p>Das ist ja das komische, die DLL wird gefunden! Das wird mir auch durch die</p>
<pre><code class="language-cpp">ShowMessage(&quot;DLL geladen&quot;);
</code></pre>
<p>bestätigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040768</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Wed, 19 Apr 2006 17:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Wed, 19 Apr 2006 17:44:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Las mal sowohl DLL als auch Anwendung komplett neu erstellen (Menü <em>Projekt/Alle Projekte erstellen</em>, wenn du beides in einer Projektgruppe hast)</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040773</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 19 Apr 2006 17:44:49 GMT</pubDate></item><item><title><![CDATA[Reply to Formular unter DLL aufrufen on Wed, 19 Apr 2006 17:54:00 GMT]]></title><description><![CDATA[<p>Danke sehr <strong>akari</strong>, du hast mir sehr bei meinem Problem geholfen. Nach dem Neuerzeugen der Projektgruppe funktioniert jetzt alles wie erwünscht.<br />
*<br />
Vielen, vielen Dank!<br />
coder24h<br />
*<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040785</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Wed, 19 Apr 2006 17:54:00 GMT</pubDate></item></channel></rss>