<?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[Übergabe von LPCTSTR]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>Nachdem ich nun seit gestern Abend alles abgesucht habe<br />
und trotzdem nicht zu einer Lösung gekommen bin, wollte<br />
ich es mal hier versuchen.</p>
<p>Arbeite mit Visual Studio 2005 und es handelt sich um ein<br />
Spiel mit DirectX. Ich lese den Pfad eines Chipsets für eine<br />
Map aus einem Textfile. Ich muss den Pfad als LPCTSTR übergeben.</p>
<p>Ich konvertiere den (C-)String in einen wchar_t*.<br />
Diesen übergebe ich an den Map-Konstruktor.<br />
Nun, beim Konvertieren klappt alles wunderbar.<br />
Die Übergabe an den Konstruktor funktioniert ebenfalls.<br />
Nur:<br />
Sobald der Funktionsrumpf des Konstruktors betreten wird,<br />
wird aus dem Pfad (&quot;H:/Blah/Chipset.png&quot;) irgend ein Kauderwelsch.<br />
Ohne dass ich etwas mache, es passiert einfach so im Konstruktor.</p>
<p>Weiss jemand, was das ist? Habe ich nicht gut genug gesucht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217698/übergabe-von-lpctstr</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 09:34:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217698.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Jul 2008 07:23:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 07:23:17 GMT]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>Nachdem ich nun seit gestern Abend alles abgesucht habe<br />
und trotzdem nicht zu einer Lösung gekommen bin, wollte<br />
ich es mal hier versuchen.</p>
<p>Arbeite mit Visual Studio 2005 und es handelt sich um ein<br />
Spiel mit DirectX. Ich lese den Pfad eines Chipsets für eine<br />
Map aus einem Textfile. Ich muss den Pfad als LPCTSTR übergeben.</p>
<p>Ich konvertiere den (C-)String in einen wchar_t*.<br />
Diesen übergebe ich an den Map-Konstruktor.<br />
Nun, beim Konvertieren klappt alles wunderbar.<br />
Die Übergabe an den Konstruktor funktioniert ebenfalls.<br />
Nur:<br />
Sobald der Funktionsrumpf des Konstruktors betreten wird,<br />
wird aus dem Pfad (&quot;H:/Blah/Chipset.png&quot;) irgend ein Kauderwelsch.<br />
Ohne dass ich etwas mache, es passiert einfach so im Konstruktor.</p>
<p>Weiss jemand, was das ist? Habe ich nicht gut genug gesucht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544728</guid><dc:creator><![CDATA[Asmodiel]]></dc:creator><pubDate>Thu, 10 Jul 2008 07:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 09:28:06 GMT]]></title><description><![CDATA[<p>Vielleicht könnte man dir besser helfen wenn du etwas von deinem bisherigen Code zeigen würdest.<br />
Insbesondere wie du deinen String konvertierst und schließlich wohin auch immer übergibst, am besten bis zu der Stelle an der dein Problem auftaucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544820</guid><dc:creator><![CDATA[JustSomeCoder]]></dc:creator><pubDate>Thu, 10 Jul 2008 09:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 11:58:46 GMT]]></title><description><![CDATA[<p>Hatte das Problem jetzt erneut, bei einer anderen Sache.</p>
<pre><code class="language-cpp">wchar_t* str = Convert(tmpChipset.c_str());
LPCTSTR arrrr = str; // Zum Überprüfen noch in LPCTSTR

// GameMap erstellen
GameMap gm(tmpWidth, tmpHeight, renderDevice, arrrr);
</code></pre>
<p>Convert-Funktion:</p>
<pre><code class="language-cpp">wchar_t* Convert(const char* cp)
{
	// Convert to a wchar_t*
    size_t origsize = strlen(cp) + 1;
    const size_t newsize = 100;
    size_t convertedChars = 0;
    wchar_t wcstring[newsize];
    mbstowcs_s(&amp;convertedChars, wcstring, origsize, cp, _TRUNCATE);
    return wcstring;
}
</code></pre>
<p>Der Wert von arrrr wird in ein Kauderwelsch verändert, sobald der Konstruktor aufgerufen wird.</p>
<pre><code class="language-cpp">GameMap::GameMap(int width, int height, LPDIRECT3DDEVICE9 renderDevice, LPCTSTR chipsetPath)
{
	this-&gt;width = width; // Hier. Einfach so. Plopp.
	this-&gt;height = height;
	this-&gt;renderDevice = renderDevice;
	this-&gt;chipsetPath = chipsetPath;

	this-&gt;tileWidth = 16;
	this-&gt;tileHeight = 16;

	this-&gt;Initialize();
	this-&gt;LoadContent();
}
</code></pre>
<p>================================</p>
<p>Das Problem gab es jetzt nochmal an einer anderen Stelle, mit einem normalen char*. Sobald ich ihn an eine Funktion übergebe -&gt; selbes Veränderungs-Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544965</guid><dc:creator><![CDATA[Asmodiel]]></dc:creator><pubDate>Thu, 10 Jul 2008 11:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 12:16:18 GMT]]></title><description><![CDATA[<ol>
<li>Bist du dir sicher, dass LPCTSTR ein wchar_t* ist?<br />
Denn ein wchar_t* wird (zumindest bei mir) implizit in einen char* konvertiert, wenn ich das dem Compiler sage. Er spuckt lediglich eine Warnung aus:</li>
</ol>
<pre><code class="language-cpp">wchar_t* a = NULL;
char* b = a; // Gibt nur eine Warnung
</code></pre>
<p>Dass bei sowas nur Müll raus kommt, sollte klar sein.<br />
LPCTSTR ist ja nur ein Makro (afaik), das von der Projekteinstellung abhängig ist.<br />
Denn: &quot;LPCTSTR = const char* oder const wchar_t* abhängig von _UNICODE&quot;</p>
<p>Wenn dein LPCTSTR ein const char* ist, ist deine Konvertierung für die Katz'.</p>
<ol start="2">
<li>Warum machst du tmpChipset nicht zu einem std::wstring, wenn du eh mit wchar_t* arbeiten musst? Dann könntest du dir die Konvertierung sparen.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1544989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544989</guid><dc:creator><![CDATA[aDFHKGH]]></dc:creator><pubDate>Thu, 10 Jul 2008 12:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 13:18:44 GMT]]></title><description><![CDATA[<p>Arbeitest du MIT oder OHNE Unicode?</p>
<p>Falls du dein Programm ohne Unicode schreibst, sollte folgendes schon ausreichen und funktionieren.</p>
<pre><code class="language-cpp">LPCTSTR arrrr = tmpChipset.c_str();
GameMap gm(tmpWidth, tmpHeight, renderDevice, arrrr);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1545034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545034</guid><dc:creator><![CDATA[JustSomeCoder]]></dc:creator><pubDate>Thu, 10 Jul 2008 13:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 13:42:39 GMT]]></title><description><![CDATA[<p>Jetzt arbeite ich ohne Unicode.<br />
Denn ohne Unicode funktioniert es wunderbar, ohne<br />
irgendwelche Konvertierungen...<br />
Trotzdem hätte es mich sehr interessiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545069</guid><dc:creator><![CDATA[Asmo]]></dc:creator><pubDate>Thu, 10 Jul 2008 13:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe von LPCTSTR on Thu, 10 Jul 2008 14:12:50 GMT]]></title><description><![CDATA[<p>Dann schau dir mal folgendes kurzes Unicode Beispiel an.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

void GameMap(LPCTSTR chipsetPath)
{
	// Wenn du jetzt den wstring doch wieder als normalen string brauchst,
	// beispielsweise um ihn auszugeben, kann man das so machen.
	// Falls du allerdings versuchen würdest chipsetPath direkt auszugeben,
	// ist das schon klar, dass da nur &quot;Müll&quot; rauskommt.
	std::string str;
	for(size_t i=0; i &lt; wcslen(chipsetPath); ++i)
		str += static_cast&lt;char&gt;(chipsetPath[i]);
	cout &lt;&lt; str &lt;&lt; endl;
}

int main()
{    
	wstring tmpChipset = L&quot;H:/Blah/Chipset.png&quot;;

	GameMap(tmpChipset.c_str());

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1545109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545109</guid><dc:creator><![CDATA[JustSomeCoder]]></dc:creator><pubDate>Thu, 10 Jul 2008 14:12:50 GMT</pubDate></item></channel></rss>