<?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[String-Probleme]]></title><description><![CDATA[<p>Steh grad auf dem Schlauch.</p>
<p>In einer DLL habe ich diese Klasse hier (bin ganz am Anfang, daher ist sonst nichts drin):</p>
<p>#include &lt;string.h&gt;</p>
<pre><code class="language-cpp">using namespace std;

// This class is exported from the ImageDLL.dll
class IMAGEDLL_API CImageDLL {
public:
	CImageDLL(void);
	string GetStringState();

private:
	string m_sMyState;
};
</code></pre>
<p>Mit dem String möchte ich Statusmeldungen von der DLL an die MFC-Anwendung schicken, um sie da in einem Log-Fenster anzeigen zu können. Im cpp-File siehts dann so aus:</p>
<pre><code class="language-cpp">CImageDLL::CImageDLL()
{ 
	m_sMyState = &quot;Successfully passed constructor of DLL&quot;;
	return; 
}

string CImageDLL::GetStringState()
{
	return m_sMyState;
}
</code></pre>
<p>In der MFC-Anwendung rufe ich dann folgendes auf:</p>
<pre><code class="language-cpp">CImageDLL test;
string sBla = test.GetStringState();

// Set the Edit-control as logger destination
m_EditLogger.SetEditCtrl( m_strEdit.m_hWnd );

// Redirect cout to our Edit-Control
m_pOldBuf = cout.rdbuf( &amp;m_EditStrBuf );
// and also the unicode version
m_pOldBufW = wcout.rdbuf( &amp;m_EditStrBufW );

// Check it
cout &lt;&lt; &quot;successfully loaded InitDialog&quot; &lt;&lt; endl;
wcout &lt;&lt; L&quot;UNICODE) works&quot; &lt;&lt; endl;
cout &lt;&lt; sBla;
cout &lt;&lt; &quot;\n\n&quot;;
</code></pre>
<p>Bevor jetzt jemand kommt und fragt, warum ich denn cout bei MFC benutze, der kann hier gucken : <a href="http://www.codeproject.com/editctrl/editlog.asp" rel="nofollow">http://www.codeproject.com/editctrl/editlog.asp</a><br />
Das funktioniert immer ohne Probleme - bis jetzt.</p>
<p>Im Debug geht's auch über den Punkt</p>
<pre><code class="language-cpp">cout &lt;&lt; sBla;
</code></pre>
<p>hinaus, aber dann kommt ein Heap-Fehler. Warum versucht er, den String zu löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/128310/string-probleme</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 14:40:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/128310.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Dec 2005 13:09:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:09:49 GMT]]></title><description><![CDATA[<p>Steh grad auf dem Schlauch.</p>
<p>In einer DLL habe ich diese Klasse hier (bin ganz am Anfang, daher ist sonst nichts drin):</p>
<p>#include &lt;string.h&gt;</p>
<pre><code class="language-cpp">using namespace std;

// This class is exported from the ImageDLL.dll
class IMAGEDLL_API CImageDLL {
public:
	CImageDLL(void);
	string GetStringState();

private:
	string m_sMyState;
};
</code></pre>
<p>Mit dem String möchte ich Statusmeldungen von der DLL an die MFC-Anwendung schicken, um sie da in einem Log-Fenster anzeigen zu können. Im cpp-File siehts dann so aus:</p>
<pre><code class="language-cpp">CImageDLL::CImageDLL()
{ 
	m_sMyState = &quot;Successfully passed constructor of DLL&quot;;
	return; 
}

string CImageDLL::GetStringState()
{
	return m_sMyState;
}
</code></pre>
<p>In der MFC-Anwendung rufe ich dann folgendes auf:</p>
<pre><code class="language-cpp">CImageDLL test;
string sBla = test.GetStringState();

// Set the Edit-control as logger destination
m_EditLogger.SetEditCtrl( m_strEdit.m_hWnd );

// Redirect cout to our Edit-Control
m_pOldBuf = cout.rdbuf( &amp;m_EditStrBuf );
// and also the unicode version
m_pOldBufW = wcout.rdbuf( &amp;m_EditStrBufW );

// Check it
cout &lt;&lt; &quot;successfully loaded InitDialog&quot; &lt;&lt; endl;
wcout &lt;&lt; L&quot;UNICODE) works&quot; &lt;&lt; endl;
cout &lt;&lt; sBla;
cout &lt;&lt; &quot;\n\n&quot;;
</code></pre>
<p>Bevor jetzt jemand kommt und fragt, warum ich denn cout bei MFC benutze, der kann hier gucken : <a href="http://www.codeproject.com/editctrl/editlog.asp" rel="nofollow">http://www.codeproject.com/editctrl/editlog.asp</a><br />
Das funktioniert immer ohne Probleme - bis jetzt.</p>
<p>Im Debug geht's auch über den Punkt</p>
<pre><code class="language-cpp">cout &lt;&lt; sBla;
</code></pre>
<p>hinaus, aber dann kommt ein Heap-Fehler. Warum versucht er, den String zu löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932286</guid><dc:creator><![CDATA[2Atlantis]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:19:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Lass deine dll mal lieber einen const char* statt einen string zurückgeben.<br />
Hast du die Dll und die Anwendung mit dem selben Compiler erstellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932299</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:19:49 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:22:55 GMT]]></title><description><![CDATA[<p>Ja, hab den gleichen Compiler verwendet. Warum gehts nicht mit string ???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932305</guid><dc:creator><![CDATA[2Atlantis]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:27:17 GMT]]></title><description><![CDATA[<p>mit const char* klappts ... aber warum gehts mit dem string nicht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932313</guid><dc:creator><![CDATA[2Atlantis]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:28:15 GMT]]></title><description><![CDATA[<p>Denke, dass es an der Implementierung von string liegen könnte. (Übergebe mal eine const CString &amp; oder const char * )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932316</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 14:53:57 GMT]]></title><description><![CDATA[<p>Bei unterschiedlichen Compilern könnte es sein, dass die std::string Implementationen unterschiedlich sind (hatte da mal ein Problem mit BCB5 und BCB6). Dann funktioniert ein copy nicht.<br />
Wie hast du es denn jetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932319</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 02 Dec 2005 14:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:33:17 GMT]]></title><description><![CDATA[<p>Kommt darauf an, wie std::string die Zuweisung eines Strings behandelt. Wenn er an dieser Stelle keine Kopie macht, sondern mit Referenzen/Zeigern arbeitet<br />
kann es sein, dass die Dll der Applikation die Zeichenkette löscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932326</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 13:36:11 GMT]]></title><description><![CDATA[<p>Stell auf &quot;Gemeinsame Laufzeitbibliothek&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932333</guid><dc:creator><![CDATA[stichwort]]></dc:creator><pubDate>Fri, 02 Dec 2005 13:36:11 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 14:49:13 GMT]]></title><description><![CDATA[<p>Hi, danke für die vielen schnellen Antworten.</p>
<p>Wie gesagt, habs jetzt mit const char* gelöst, bin damit insgesamt aber nicht sehr zufrieden, da ich in der dll einige Klassen habe und etwaige Statusmeldungen von Klasse zu Klasse &quot;hangeln&quot; muss. Das gefällt mir noch nicht so richtig.</p>
<p>Prinzipiell habe ich folgendes Problem: Ich möchte gerne eine ganze Menge Funktionen in eine DLL packen, aber über ein Logfile zur Laufzeit die Möglichkeit haben, mir von jeder beliebigen Stelle innerhalb der DLL (also auch Klassenübergreifend) Statusmeldungen geben zu lassen.</p>
<p>Wie macht man das möglichst elegant? const char* scheints ja nicht zu sein ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932419</guid><dc:creator><![CDATA[2Atlantis]]></dc:creator><pubDate>Fri, 02 Dec 2005 14:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 14:56:13 GMT]]></title><description><![CDATA[<p>Was hast du denn für Probleme mit const char*? Bzw. wie hast du es jetzt implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932431</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 02 Dec 2005 14:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 15:04:42 GMT]]></title><description><![CDATA[<p>Ich weiß nicht, ob das bei deiner Programmstruktur geht, aber du könntest die Status-Informationen intern in einem String packen und bei Bedarf als char* rausgeben:</p>
<pre><code class="language-cpp">#include &lt;string.h&gt; 
using namespace std;

// This class is exported from the ImageDLL.dll
class IMAGEDLL_API CImageDLL {
public:
    CImageDLL(void);
    const char* GetState() const;

private:
    string m_sMyState;
};  

const char* CImageDLL::GetState() const
{return m_sMyState.c_str();}
</code></pre>
<p>(PS: Wenn du - wie in deinem Beispiel - am Anfang der Arbeit die GetState() aufrufst, erhältst du sowieso nur eine Kopie des &quot;Constructor passed&quot; Strings, spätere Statusänderungen siehst du damit nicht - d.h. du müsstest anstelle des &quot;cout&lt;&lt;sBla;&quot; einen Aufruf &quot;cout&lt;&lt;test.GetStringState();&quot; einbauen, um den <em>aktuellen</em> Status zu erhalten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932435</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Dec 2005 15:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to String-Probleme on Fri, 02 Dec 2005 15:09:23 GMT]]></title><description><![CDATA[<p>2Atlantis schrieb:</p>
<blockquote>
<p>mit const char* klappts ... aber warum gehts mit dem string nicht ?</p>
</blockquote>
<p>das von Dir beschrieben Problem tritt gnau dann auf, wenn die DLL und das Programm, das die DLL anzieht nicht mit den gleichen Projekt-Optionen übersetzt wurde.<br />
Kritische Optionen sind: MT, MT-DLL, Debug/Release, Type-Run-Time-Info On/Off, Packaging</p>
<p>überprüf' das mal.<br />
Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/932442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/932442</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 02 Dec 2005 15:09:23 GMT</pubDate></item></channel></rss>