<?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[Und eine letzte Frage zu DLLs ;)]]></title><description><![CDATA[<p>So, nachdem ich mich jetzt durch jeden Beitrag zum Thema Klassen in DLLs hier im Forum durchgegraben hab, bin ich zu dem Schluss gekommen, dass man das nicht machen sollte <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 />
Allerdings hab ich beim Lesen eines Tutorials eine DLL erstellt, in der ein struct __declspec(dllexport) Struktur verwendet wird, das nur einen int Wert besitzt.<br />
Mein Hauptprogramm verwendet die DLL, hat jedoch deren Header nicht zu Verfügung, kennt also die Deklaration von Struktur nicht. Gibt es nun entgegen allen Empfehlungen und Standards eine Möglichkeit, in meinem Hauptprogramm, das die DLL dynamisch laden soll, die Struktur &quot;bekannt zu machen&quot;, ohne den Header oder ohne eine neue Deklaration zu schreiben?<br />
Ich hab da was gelesen, dass man in der DLL eine Funktion schreibt, die solch ein Objekt erstellt, und es dann als Instanz weitergibt (???)<br />
Wäre nett, wenn mir das jemand erklären könnte, falls das überhaupt mit meinem Problem zu tun hat <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>greets</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/84254/und-eine-letzte-frage-zu-dlls</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 21:32:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/84254.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Aug 2004 13:42:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 13:42:00 GMT]]></title><description><![CDATA[<p>So, nachdem ich mich jetzt durch jeden Beitrag zum Thema Klassen in DLLs hier im Forum durchgegraben hab, bin ich zu dem Schluss gekommen, dass man das nicht machen sollte <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 />
Allerdings hab ich beim Lesen eines Tutorials eine DLL erstellt, in der ein struct __declspec(dllexport) Struktur verwendet wird, das nur einen int Wert besitzt.<br />
Mein Hauptprogramm verwendet die DLL, hat jedoch deren Header nicht zu Verfügung, kennt also die Deklaration von Struktur nicht. Gibt es nun entgegen allen Empfehlungen und Standards eine Möglichkeit, in meinem Hauptprogramm, das die DLL dynamisch laden soll, die Struktur &quot;bekannt zu machen&quot;, ohne den Header oder ohne eine neue Deklaration zu schreiben?<br />
Ich hab da was gelesen, dass man in der DLL eine Funktion schreibt, die solch ein Objekt erstellt, und es dann als Instanz weitergibt (???)<br />
Wäre nett, wenn mir das jemand erklären könnte, falls das überhaupt mit meinem Problem zu tun hat <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>greets</p>
]]></description><link>https://www.c-plusplus.net/forum/post/593815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/593815</guid><dc:creator><![CDATA[Johannes Maier]]></dc:creator><pubDate>Sat, 28 Aug 2004 13:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 16:55:14 GMT]]></title><description><![CDATA[<p>Du sprichst wahrscheinlich von COM-Programmierung. Dabei erstellst du Komponenten DLL/EXE in einer Art und Weise das auf Client-Anforderung hin, Instanzen von Objekten erzeugt und an den Client zurückgeliefert werden.<br />
Es gibt im wesentlichen 3 Vorgehensweisen zur Erstellung durch Visual C++:<br />
1.) MFC<br />
2.) ATL<br />
3.) &quot;von Hand&quot;<br />
Alle 3 Methoden erfordern einiges Wissen, insbesondere Methode 3. Sowohl mit MFC als auch mit ATL wirst du durch verschiedene Wizards unterstützt. Im Blindflug, d.h. ohne das du den Background kennst, würde ich dir aber auch diese einfacherern Methoden nicht empfehlen.</p>
<p>Nachfolgend die besten Buchempfehlungen:<br />
<a href="http://www.amazon.de/exec/obidos/ASIN/1572313498/qid=1093701811/sr=1-4/ref=sr_1_10_4/302-0121747-7368024" rel="nofollow">http://www.amazon.de/exec/obidos/ASIN/1572313498/qid=1093701811/sr=1-4/ref=sr_1_10_4/302-0121747-7368024</a><br />
<a href="http://www.amazon.de/exec/obidos/ASIN/0201634465/qid=1093701880/sr=1-1/ref=sr_1_10_1/302-0121747-7368024" rel="nofollow">http://www.amazon.de/exec/obidos/ASIN/0201634465/qid=1093701880/sr=1-1/ref=sr_1_10_1/302-0121747-7368024</a><br />
<a href="http://www.amazon.de/exec/obidos/ASIN/3860634593/qid=1093701992/sr=1-2/ref=sr_1_26_2/302-0121747-7368024" rel="nofollow">http://www.amazon.de/exec/obidos/ASIN/3860634593/qid=1093701992/sr=1-2/ref=sr_1_26_2/302-0121747-7368024</a></p>
<p>mfg JJ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/593834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/593834</guid><dc:creator><![CDATA[John Doe]]></dc:creator><pubDate>Sat, 28 Aug 2004 16:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 16:23:31 GMT]]></title><description><![CDATA[<p>du willst also aus einer dll ein struct laden, ohne dass du weisst was des is?<br />
da aber dein programm nicht weiss was es ist kanns doch auch nix mit den daten der dll machen</p>
<p>am besten sagst du einfach was du im endeffekt machen/erreichen willst</p>
<p>ausserdem bitte definiere &quot;bekannt zu machen&quot; <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>
]]></description><link>https://www.c-plusplus.net/forum/post/593973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/593973</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Sat, 28 Aug 2004 16:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 17:27:03 GMT]]></title><description><![CDATA[<p>Mit bekannt zu machen meine ich deklarieren <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="😉"
    /> Ich bring nur ab und zu solche Begriffe ein bisschen durcheinander <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>
<p>Also ganz einfach sieht der Header in der DLL so aus:</p>
<pre><code class="language-cpp">#ifdef __cplusplus
extern &quot;C&quot; {
#endif

struct __declspec(dllexport) Struktur
{
  int Wert;
}

__declspec(dllexport) int GetWert(Struktur);

#ifdef __cplusplus
}
#endif
</code></pre>
<p>Die .cpp Datei der DLL:</p>
<pre><code class="language-cpp">#include &quot;testdll.h&quot;

__declspec(dllexport) int GetWert(Struktur S)
{
  return S.Wert;
}
</code></pre>
<p>Ich geh nun davon aus, dass ich ein Programm, das diese DLL benötigt, auf einem anderen Rechner ausgeführt werden soll. Dort hab ich dann aber nicht den passenden Header (ich geh einfach mal davon aus, dass ich den Header nicht habe, will also nur schauen, ob das Problem so lösbar ist). In diesem Hauptprogramm will ich die Funktion GetWert benutzen, laden kann ich diese ja so:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

typedef int (* pfnGet)(Struktur); // hier gibts logischerweise nen Fehler

int main()
{
  HMODULE hDll = LoadLibrary(&quot;testdll.dll&quot;);
  pfnGet GetWert = (pfnGet)GetProcAddress(hDll, &quot;GetWert&quot;);
  .
  .
  .
  return 0;
}
</code></pre>
<p>Meine Frage ist nun, ob es die Möglichkeit gibt, dass er sich die Deklaration von Struktur quasi aus der DLL nimmt (Struktur kann ja auch eine Klasse sein), also ohne dass ich einen Header einbinde. Denn wenn ich von jemandem eine in C++ geschriebene DLL mit Funktionen oder Klassen bekomme, hab ich ja auch keinen passenden Header.<br />
Es läuft also auf die Frage zur Exportierung von Klassen heraus (denke ich <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="😕"
    /> )<br />
Ich will einfach die DLL ohne Header verwenden und die Strukt-/Klassendeklaration nicht neu schreiben in meiner cpp Datei. Mir würde da so etwas wie GetClassAddress oder so vorschweben, aber das gibts wohl nicht <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="😉"
    /><br />
Denn im Moment kommen ja logischerweise überall Fehler, wo ich Struktur im Hauptprogramm verwende, da er sie ja nicht kennt.<br />
Falls das aber nicht geht, frage ich mich, wieso im Tutorial (oder auch wenn man bei DLL in MVC auf ein paar Symbole exportieren klickt) die Struktur bzw. die Klasse mit __declspec(dllexport) deklariert wird.</p>
<p>Hoffe ich konnte mich ein bisschen verständlicher ausdrücken ... <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/594043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/594043</guid><dc:creator><![CDATA[Johannes Maier]]></dc:creator><pubDate>Sat, 28 Aug 2004 17:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 17:37:22 GMT]]></title><description><![CDATA[<p>Ich weiss nicht ob du meinen Beitrag gelesen hast. Aber das was (möglicherweise !?) suchst ist Introspektion wie es sie beispielsweise bei Java gibt. Das heisst, zur Laufzeit die Fähigkeiten einer Klasse ermitteln, ohne die Nutzung &quot;externer&quot; Informationen.<br />
Mittels COM ist sowas auch in C++ zu realisieren. Genau diesen Zweck hat das IDispatch-Interface. Die Nutzung diese Features sieht man in den Eigenschaftsdialogen von &quot;vb&quot;-artigen Entwicklungsumgebungen.</p>
<p>mfg JJ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/594051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/594051</guid><dc:creator><![CDATA[John Doe]]></dc:creator><pubDate>Sat, 28 Aug 2004 17:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 17:40:03 GMT]]></title><description><![CDATA[<blockquote>
<p>Denn wenn ich von jemandem eine in C++ geschriebene DLL mit Funktionen oder Klassen bekomme, hab ich ja auch keinen passenden Header.</p>
</blockquote>
<p>doch in der regel liefert jede dll/lib passende header mit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/594053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/594053</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Sat, 28 Aug 2004 17:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Und eine letzte Frage zu DLLs ;) on Sat, 28 Aug 2004 18:19:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/667">@John</a>: Ja ich hab deinen Beitrag gelesen <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="😉"
    /><br />
Allerdings gab es auf ähnliche Frage immer eine kürzere Antwort, worauf dann jeder gesagt hat &quot;OK so mach ichs Danke&quot; <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="😉"
    /> Und da war nie von COM die Rede, aber davon hab ich ja auch keine Ahnung ...<br />
Ich muss jetzt zwar schnell off, such aber morgen früh mal einen Thread heraus, wo es so beschrieben ist <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/594083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/594083</guid><dc:creator><![CDATA[Johannes Maier]]></dc:creator><pubDate>Sat, 28 Aug 2004 18:19:38 GMT</pubDate></item></channel></rss>