<?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[Klasse aus DLL, aber wie importieren?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine klasse in einer dll:<br />
dll.cpp</p>
<pre><code class="language-cpp">class __declspec(dllexport)  Test
{
 public:
  void ShowIt(){ShowMessage(&quot;AUS TEST&quot;);}
};
</code></pre>
<p>und möchte diese in meinem programm verwenden<br />
main.cpp</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
HINSTANCE h = LoadLibrary(&quot;Project2.dll&quot;);
if(h)
   {

   }
else
   {
    ShowMessage(&quot;Datei wurde nicht gefunden&quot;);
   }
}
</code></pre>
<p>aber wie importiere ich die klasse?<br />
muss ich hier auch einen zeiger erstellen wie bei funktionen und variablen, wie üsste dieser aussehen?</p>
<p>oder geht es ganz anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171798/klasse-aus-dll-aber-wie-importieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 06:59:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171798.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jan 2007 14:02:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Mon, 29 Jan 2007 14:02:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine klasse in einer dll:<br />
dll.cpp</p>
<pre><code class="language-cpp">class __declspec(dllexport)  Test
{
 public:
  void ShowIt(){ShowMessage(&quot;AUS TEST&quot;);}
};
</code></pre>
<p>und möchte diese in meinem programm verwenden<br />
main.cpp</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
HINSTANCE h = LoadLibrary(&quot;Project2.dll&quot;);
if(h)
   {

   }
else
   {
    ShowMessage(&quot;Datei wurde nicht gefunden&quot;);
   }
}
</code></pre>
<p>aber wie importiere ich die klasse?<br />
muss ich hier auch einen zeiger erstellen wie bei funktionen und variablen, wie üsste dieser aussehen?</p>
<p>oder geht es ganz anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219212</guid><dc:creator><![CDATA[bvbcvb]]></dc:creator><pubDate>Mon, 29 Jan 2007 14:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Mon, 29 Jan 2007 16:04:46 GMT]]></title><description><![CDATA[<p>Hi,<br />
muss wohl ein bekanntes Problem einer bestimmten Klasse sein. <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="🤡"
    /><br />
Vielleicht kann dir folgender Link weiter helfen.</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-171528.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-171528.html</a></p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219275</guid><dc:creator><![CDATA[steinsoft]]></dc:creator><pubDate>Mon, 29 Jan 2007 16:04:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 08:38:05 GMT]]></title><description><![CDATA[<p>Du kannst Klassen so nicht dynamisch importieren. Du kannst aber Funktionen importieren, die dir Zeiger auf Klasseninstanzen liefern. Du erzeugst dann die Klasseninstanz innerhalb der dll und importierst einen zeiger auf diese Instanz in deine Anwendung. Das Freigeben des Speichers für diese Instanzen sollte dann auch in der dll mit Hilfe einer weiteren exportierten Funktion erfolgen.</p>
<pre><code class="language-cpp">// in der dll
class Test
{
};

extern &quot;C&quot; __declspec(dllexport) Test* getTest()
{
   return new Test;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1219304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219304</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:38:05 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 00:10:07 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Braunstein hat sicher Recht..... <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/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Hier mal wie man das laut meinem Buch macht....<br />
Man braucht die Headerdatei und die libdatei der Header.<br />
Ich glaub es geht auch nur mit der Header wird hier aber nicht beschrieben</p>
<pre><code>1. ShowMessage wird nicht in einer DLL funktionieren
   da es eine VCL spezifische Sache ist!!!
2. man muss die Headerdatei der dll in das Projekt einbinden
   #include &quot;dll.h&quot; 
3. man muss beim Dll erzeugen die lib Datei mit erzeugen lassen
   BCB.Menü.Oben-&gt;Projekt-&gt;Optionen-&gt;Linker-&gt;(haken bei lib erzeugen)
</code></pre>
<p>So... hier mal der Code wie er bei mir funkioniert</p>
<p><strong>DLL.h</strong></p>
<pre><code class="language-cpp">class __declspec(dllexport) Klasse {  //Klasse kanst dein name nehmen
public:                               //aber immer beibehalten
Klasse(HWND hwnd);
void hallo(char *titel, char* text);  //die funktionen (deine eigenen)
private:
HWND hWnd;                            //der Zeiger-&gt; dass MessageBox weis wo sie
};                                    //hin muss
</code></pre>
<p><strong>DLL.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#pragma hdrstop                      //das einfügen!!!!! 

#include &quot;dll.h&quot;                    //das einfügen!!!!!!

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------

Klasse::Klasse(HWND hwnd)
{
 hWnd = hwnd;
}

void Klasse::hallo(char *titel, char* text)
{
 MessageBox(hWnd, text, titel, MB_OK | MB_ICONEXCLAMATION);
}
</code></pre>
<p><strong>das Projekt</strong></p>
<p>So und jetzt zu deiner eigenlichen Frage wie ruft man die Funktion einer<br />
Klasse auf die in einer DLL steckt....<br />
1. die DLL.lib in das Projekt einfügen Projekt-&gt;Dem Projekt zufügen<br />
2. oben #include &quot;dll.h&quot;</p>
<pre><code class="language-cpp">#include &quot;dll.h&quot;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Klasse huhu(Application-&gt;Handle);        //Klasse steht da weil in der dll.h so steht!!
 huhu.hallo(&quot;der Titel&quot;, &quot;das ist der Text&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
<p>Hoffe das beantwortet alles!!!</p>
<p>Grüsse <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="👍"
    /></p>
<p>*edit* hab erst jetzt gesehen, das noch viele Präprozessor-anweisungen drin waren (unötige)<br />
*edit* jetzt is aber gut oder <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/1219491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219491</guid><dc:creator><![CDATA[steinsoft]]></dc:creator><pubDate>Tue, 30 Jan 2007 00:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 07:59:18 GMT]]></title><description><![CDATA[<p>also hab ich das richtig verstanden, das ich klassen GARNICHT dynamisch exportieren kann, so wie normale variablen?<br />
Geht nur über funktionen oder eben statisch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219553</guid><dc:creator><![CDATA[bvbcvb]]></dc:creator><pubDate>Tue, 30 Jan 2007 07:59:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 08:01:52 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Du kannst Klassen so nicht dynamisch importieren. Du kannst aber Funktionen imortieren, die dir Zeiger auf Klasseninstanzen liefern. Du erzeugst dann die Klasseninstanz innerhalb der dll und importierst einen zeiger auf diese Instanz in deine Anwendung. Das Freigeben des Speichers für diese Instanzen sollte dann auch in der dll mit Hilfe einer weiteren exportierten Funktion erfolgen.</p>
<pre><code class="language-cpp">// in der dll
class Test
{
};

extern &quot;C&quot; __declspec(dllexport) Test* getTest()
{
   return new Test;
}
</code></pre>
</blockquote>
<p>eine frage noch hierzu:<br />
wie kann ich denn die funktion im programm verwenden?<br />
ich muss die funktion doch eigentl so benutzen:</p>
<pre><code class="language-cpp">Test* t = getTest();
</code></pre>
<p>aber Test ist ja nicht bekannt!<br />
Oder soll ich einen void-zeiger nehmen und diesen casten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219554</guid><dc:creator><![CDATA[bvbcvb]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 08:20:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>bvbcvb schrieb:</p>
<blockquote>
<p>also hab ich das richtig verstanden, das ich klassen GARNICHT dynamisch exportieren kann, so wie normale variablen?<br />
Geht nur über funktionen oder eben statisch?</p>
</blockquote>
<p>Ja, Klassen nur statisch.</p>
<blockquote>
<p>aber Test ist ja nicht bekannt!</p>
</blockquote>
<p>Natürlich muß zur Verwendung von getTest auch Test bekannt sein. Wenn du Klassen verwenden willst, komst du nicht um die vollständige bekannte Klassendefinition umhin.</p>
<blockquote>
<p>Oder soll ich einen void-zeiger nehmen und diesen casten?</p>
</blockquote>
<p>void-Zeiger sollten vermieden werden. Und zum casten brauchst du auch wieder die Zielklasse.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219569</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 08:41:12 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Natürlich muß zur Verwendung von getTest auch Test bekannt sein. Wenn du Klassen verwenden willst, komst du nicht um die vollständige bekannte Klassendefinition umhin.</p>
<p>bis bald<br />
akari</p>
</blockquote>
<p>ok, und wie mache ich die klasse bekannt, wenn ich ja nur über funktionen dynmaisch auf die dll zugreifen will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219582</guid><dc:creator><![CDATA[bvbcvb]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 08:43:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>akari schrieb:</p>
<blockquote>
<p>Wenn du Klassen verwenden willst, komst du nicht um die vollständige bekannte Klassendefinition umhin.</p>
</blockquote>
<p>Die Deklaration der Klasse reicht. Du mußt also lediglich die Headerdatei, in der die Klasse deklariert worden ist, mit in das Projekt aufnehmen.<br />
Wenn man Teile der Klassendeklaration verstecken will, kommt man nicht darum herum eine separate Wrapperklasse zu schreiben, die nur die notwendigen Funktionen offenlegt. Dies ist aber meist nicht nötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219584</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:43:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 08:57:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>*Unsinn*</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219591</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse aus DLL, aber wie importieren? on Tue, 30 Jan 2007 09:15:09 GMT]]></title><description><![CDATA[<p>Hier veilleicht noch ein Hinweis: <a href="http://www.junix.ch/dll_and_vcl.html" rel="nofollow">http://www.junix.ch/dll_and_vcl.html</a></p>
<p>Ich hab den Artikel mal vor Urzeiten von einer anderen Webseite gesichert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219610</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Tue, 30 Jan 2007 09:15:09 GMT</pubDate></item></channel></rss>