<?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[STL Klassen in DLLs benutzen]]></title><description><![CDATA[<p>Hallo alle.</p>
<p>Ich kaue derzeit an einem Problem, zu dem ich absolut keine Lösung finde:</p>
<p>Ich habe zwei Klassen: Klasse Point und Klasse Polygon. Es ist eine recht einfache Repräsentation: das Polygon besteht aus einer Liste von Punkten. Um diese Liste zu realisieren, habe ich die STL-KLasse std::vector konsultiert. Aber leider liegt genau darin das Problem.<br />
Da ich die Polygon-Klasse (und andere) zu einer DLL kompiliere, welche ich in einem anderen Programm benutze(n muss), crasht mein Testprogramm immer, sobald ich die Polygon-Klasse aus der DLL benutze.<br />
Durch Probieren habe ich herausgefunden, dass es an der STL-Klasse liegt. Ähnlicher Murks tritt auch auf, wenn ich std::string nutze.</p>
<p>Durch Googlen bin ich nur auf eine Stelle gestoßen, die mir in knappen Worten mitteilte, dass man die Definition EXP_STL benutzen soll, wenn mal STLs in DLLs benutzen mag. Aber das half leider gar nichts.</p>
<p>Also, die Frage könnt ihr euch schon denken: Was muss man beachten/einstellen/heraufbeschwören, wenn man STL-Klassen in einer DLL benutzen mag?</p>
<p>Hier Code-Beispiele:</p>
<p>Die DLL:</p>
<pre><code class="language-cpp">#define DLLEXPORT __declspec(dllexport)

#include &lt;vector&gt;
#include &quot;point.h&quot;

class DLLEXPORT Polygon
{
 ...
 protected:
  std::vector&lt;Point&gt; points;    //Dies ist die Knackstelle
  //std::string testString;       //auch dies crasht bei der Ausführung
};
...
</code></pre>
<p>Dann im Testprogramm (eine EXE):</p>
<pre><code class="language-cpp">#include &quot;polygon.h&quot; //DLLimport-Header

int main(int argc, char** argv)
{
   Polygon poly();

   cout &lt;&lt; &quot;Programm Ende&quot; &lt;&lt; endl;
   return 0;
}
</code></pre>
<p>Ich bitte zu bedenken, dass beide Sachen einwandfrei kompilieren und sogar das Testprogramm durchläuft (das &quot;Programm Ende&quot; wird ausgegeben). Jedoch kommt immer einer Speicherschutzverletzung.</p>
<p>Ich entwickle unter WinXP mit MS Visual C+++ 2005 Express Edition.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170780/stl-klassen-in-dlls-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 03:45:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170780.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jan 2007 14:50:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Klassen in DLLs benutzen on Fri, 19 Jan 2007 14:50:31 GMT]]></title><description><![CDATA[<p>Hallo alle.</p>
<p>Ich kaue derzeit an einem Problem, zu dem ich absolut keine Lösung finde:</p>
<p>Ich habe zwei Klassen: Klasse Point und Klasse Polygon. Es ist eine recht einfache Repräsentation: das Polygon besteht aus einer Liste von Punkten. Um diese Liste zu realisieren, habe ich die STL-KLasse std::vector konsultiert. Aber leider liegt genau darin das Problem.<br />
Da ich die Polygon-Klasse (und andere) zu einer DLL kompiliere, welche ich in einem anderen Programm benutze(n muss), crasht mein Testprogramm immer, sobald ich die Polygon-Klasse aus der DLL benutze.<br />
Durch Probieren habe ich herausgefunden, dass es an der STL-Klasse liegt. Ähnlicher Murks tritt auch auf, wenn ich std::string nutze.</p>
<p>Durch Googlen bin ich nur auf eine Stelle gestoßen, die mir in knappen Worten mitteilte, dass man die Definition EXP_STL benutzen soll, wenn mal STLs in DLLs benutzen mag. Aber das half leider gar nichts.</p>
<p>Also, die Frage könnt ihr euch schon denken: Was muss man beachten/einstellen/heraufbeschwören, wenn man STL-Klassen in einer DLL benutzen mag?</p>
<p>Hier Code-Beispiele:</p>
<p>Die DLL:</p>
<pre><code class="language-cpp">#define DLLEXPORT __declspec(dllexport)

#include &lt;vector&gt;
#include &quot;point.h&quot;

class DLLEXPORT Polygon
{
 ...
 protected:
  std::vector&lt;Point&gt; points;    //Dies ist die Knackstelle
  //std::string testString;       //auch dies crasht bei der Ausführung
};
...
</code></pre>
<p>Dann im Testprogramm (eine EXE):</p>
<pre><code class="language-cpp">#include &quot;polygon.h&quot; //DLLimport-Header

int main(int argc, char** argv)
{
   Polygon poly();

   cout &lt;&lt; &quot;Programm Ende&quot; &lt;&lt; endl;
   return 0;
}
</code></pre>
<p>Ich bitte zu bedenken, dass beide Sachen einwandfrei kompilieren und sogar das Testprogramm durchläuft (das &quot;Programm Ende&quot; wird ausgegeben). Jedoch kommt immer einer Speicherschutzverletzung.</p>
<p>Ich entwickle unter WinXP mit MS Visual C+++ 2005 Express Edition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212695</guid><dc:creator><![CDATA[KrokoDiehl]]></dc:creator><pubDate>Fri, 19 Jan 2007 14:50:31 GMT</pubDate></item><item><title><![CDATA[Reply to STL Klassen in DLLs benutzen on Fri, 19 Jan 2007 18:56:17 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=403" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC (Visual C++)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212866</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 19 Jan 2007 18:56:17 GMT</pubDate></item></channel></rss>