<?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[DLL und std::strings als Übergabeparameter]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Ich weiß nicht ob das hierher gehört (__declspec ist nun mal nicht ANSI C++)<br />
aber ich versuchs mal:</p>
<p>Also ich habe eine DLL, die eine Funktion</p>
<pre><code class="language-cpp">__declspec(dllexport) void Test(std::string bla);
</code></pre>
<p>exportiert. Kompiliert ist sie mit VS2005, ohne Unicode Unterstützung.</p>
<p>Wenn ich diese DLL aus einer 0815 exe (ebenfalls ohne Unicode) aufrufe mit</p>
<pre><code class="language-cpp">Test(&quot;blabla&quot;);
</code></pre>
<p>dann erhalte ich auf der DLL Seite einen String, der irgendwelche 4 Zeichen enthält und erst dann mein &quot;blabla&quot; erscheint! Das merkwürdige ist: ist die DLL mit Debug kompiliert, erhalte ich den Fehler nicht - nur unter Release. Dabei spielt es keine Rolle, wie die exe kompiliert ist.<br />
Die DLL wird statisch (mit einer lib) eingebunden.</p>
<p>Was ich schon immer wissen wollte: gibt es einen Unterschied zwischen einer Debug LIB und einer Release LIB? Ich denk mal nicht aber ich habe sicherheitshalber die korrekte genommen.</p>
<p>Vielen Dank für Hinweise!</p>
<p>Gruß</p>
<p>Mark</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171698/dll-und-std-strings-als-übergabeparameter</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 23:57:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171698.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Jan 2007 14:42:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 14:42:21 GMT]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Ich weiß nicht ob das hierher gehört (__declspec ist nun mal nicht ANSI C++)<br />
aber ich versuchs mal:</p>
<p>Also ich habe eine DLL, die eine Funktion</p>
<pre><code class="language-cpp">__declspec(dllexport) void Test(std::string bla);
</code></pre>
<p>exportiert. Kompiliert ist sie mit VS2005, ohne Unicode Unterstützung.</p>
<p>Wenn ich diese DLL aus einer 0815 exe (ebenfalls ohne Unicode) aufrufe mit</p>
<pre><code class="language-cpp">Test(&quot;blabla&quot;);
</code></pre>
<p>dann erhalte ich auf der DLL Seite einen String, der irgendwelche 4 Zeichen enthält und erst dann mein &quot;blabla&quot; erscheint! Das merkwürdige ist: ist die DLL mit Debug kompiliert, erhalte ich den Fehler nicht - nur unter Release. Dabei spielt es keine Rolle, wie die exe kompiliert ist.<br />
Die DLL wird statisch (mit einer lib) eingebunden.</p>
<p>Was ich schon immer wissen wollte: gibt es einen Unterschied zwischen einer Debug LIB und einer Release LIB? Ich denk mal nicht aber ich habe sicherheitshalber die korrekte genommen.</p>
<p>Vielen Dank für Hinweise!</p>
<p>Gruß</p>
<p>Mark</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218631</guid><dc:creator><![CDATA[pub00515]]></dc:creator><pubDate>Sun, 28 Jan 2007 14:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 14:44:32 GMT]]></title><description><![CDATA[<p>In den Projektoption für beide Module die Multithreaded-(Debug)-DLL auswählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218633</guid><dc:creator><![CDATA[--------]]></dc:creator><pubDate>Sun, 28 Jan 2007 14:44:32 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 14:49:49 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>VS2005 hat nur noch die multi-threaded DLL's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218635</guid><dc:creator><![CDATA[pub00515]]></dc:creator><pubDate>Sun, 28 Jan 2007 14:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 14:59:10 GMT]]></title><description><![CDATA[<p>Also bei mir gibts die Laufzeitbibliothek als statische Library. Aber wichtig ist das du halt in beiden EXE und DLL die gleiche DLL nimmst.</p>
<p>Also z.B. EXE mit Multithreaded-Debug-DLL und die DLL mit Multithreaded-DLL geht nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218643</guid><dc:creator><![CDATA[--------]]></dc:creator><pubDate>Sun, 28 Jan 2007 14:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 15:42:50 GMT]]></title><description><![CDATA[<p>Ok, disregard <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Hatte den gleichen Post-build-script und somit Release mit Debug gemischt...<br />
Das hatte ich aber noch nie, dass sich Debug und Release nicht vertragen können. Man lernt halt immer dazu.</p>
<p>Und die Libs, bleiben die identisch?</p>
<p>Gruß,</p>
<p>Mark</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218645</guid><dc:creator><![CDATA[pub00515]]></dc:creator><pubDate>Sun, 28 Jan 2007 15:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 15:56:51 GMT]]></title><description><![CDATA[<p>Du musst auf jeden Fall die DLL nehmen, damit du eine gemeinsame CRT hast und nicht eine für die EXE und eine für die DLL, sonst funktioniert das nicht.<br />
Dass Debug und Release verschieden sind sollte klar sein, daher sollte es dich auch nicht wundern, dass das so nicht funktioniert. Denn auch wenn das Verhalten nach außen in Debug und Release scheinbar indentisch ist, so laufen intern andere Routinen ab.</p>
<p>Debug und Release sollte man nicht mischen. Es lief bei dir sicher bisher immer weil du eine Lib A und eine Lib B hattest die nix miteinander zu tun haben und dann macht es auch nichts, wenn die eine Release und die andere ein Debug Build ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218683</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sun, 28 Jan 2007 15:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 18:02:48 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/1218757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218757</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 28 Jan 2007 18:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 20:56:08 GMT]]></title><description><![CDATA[<p>lolz schrieb:</p>
<blockquote>
<p>Du musst auf jeden Fall die DLL nehmen, damit du eine gemeinsame CRT hast und nicht eine für die EXE und eine für die DLL, sonst funktioniert das nicht.</p>
</blockquote>
<p>In diesem Fall stimmt das.<br />
Wenn man den String aber als Zeiger oder Referenz übergibt, kannst aber auch nur Multithreaded sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218863</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Sun, 28 Jan 2007 20:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Sun, 28 Jan 2007 21:00:09 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>lolz schrieb:</p>
<blockquote>
<p>Du musst auf jeden Fall die DLL nehmen, damit du eine gemeinsame CRT hast und nicht eine für die EXE und eine für die DLL, sonst funktioniert das nicht.</p>
</blockquote>
<p>In diesem Fall stimmt das.<br />
Wenn man den String aber als Zeiger oder Referenz übergibt, kannst aber auch nur Multithreaded sein.</p>
</blockquote>
<p>Hmm wieso denn?</p>
<p>Und wieso wurde das Posting in das MFC Forum verschoben? Ich habe noch nie in meinem Leben MFC benutzt <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>Mit strings meinte ich die std::string - also die C++ String Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218867</guid><dc:creator><![CDATA[pub00515]]></dc:creator><pubDate>Sun, 28 Jan 2007 21:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Mon, 29 Jan 2007 09:43:00 GMT]]></title><description><![CDATA[<p>pub00515 schrieb:</p>
<blockquote>
<p>Und wieso wurde das Posting in das MFC Forum verschoben? Ich habe noch nie in meinem Leben MFC benutzt <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>
</blockquote>
<p>Weil es hier um alle Probleme mit MSVC geht (und DLLs gehören bestimmt nicht zum ANSI C++ Standard). Aber wenn du dich dort wohler fühlst, kann ich dich gerne ins WinAPI-Board weiterschicken.</p>
<p>Allerdings: Was &quot;Multithreaded&quot; mit der Übergabe von Strings zu tun haben soll, bin ich mir auch nicht sicher. Ich weiß nur, daß du auf beiden Seiten die selben Einstellungen verwenden solltest, sonst kommt es zu Kommunikationsschwierigkeiten.</p>
<p>Im Debug-Modus werden noch Hilfsinformationen gespeichert und Zusatzaufrufe in den Code eingebaut, damit du in der Lage bist, Fehler verfolgen zu können - wenn du das mit einer Release-Version mischst, tauchen die Zusatzinformationen irgendwo im Objekt auf. (in deinem Fall bedeutet das, daß diese vier Zeichen auch im Debug-Modus da sind, aber die Debug-Version weiß, was sie damit machen soll)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219028</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Jan 2007 09:43:00 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und std::strings als Übergabeparameter on Mon, 29 Jan 2007 09:46:00 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Allerdings: Was &quot;Multithreaded&quot; mit der Übergabe von Strings zu tun haben soll, bin ich mir auch nicht sicher. Ich weiß nur, daß du auf beiden Seiten die selben Einstellungen verwenden solltest, sonst kommt es zu Kommunikationsschwierigkeiten.</p>
</blockquote>
<p>Wenn Multithreaded, dann muss es natürlich auf beiden Seiten sein, jo. Mischen ist schlecht^^<br />
Ich meinte nur es geht halt auch ohne &quot;Multithreaded DLL&quot;. Dann hauts ihn aber raus, sobald man call by value Klassen übergibt, die in irgendeiner Weise dynamisch Speicher allokieren. Hat jetzt natürlich nichts speziell mit std::string zu tun, sondern gilt allgemein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219029</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Mon, 29 Jan 2007 09:46:00 GMT</pubDate></item></channel></rss>