<?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[Unicode und CreateProcess]]></title><description><![CDATA[<p>Wollte gerade einen neuen Prozess erzeugen und per Kommandozeile den Taschenrechner aufrufen, leider hat es nicht geklappt solange das projekt den unicode zeichensatz verwendet hat. wieso?</p>
<p>zudem würde ich gerne folgende Frage beantwortet haben:</p>
<blockquote>
<p>Warum kann bei der Verwendung von Unicode beim Aufruf von CreateProcess der Parameter CmdLine nicht direkt vor Ort z.B. mit L“calc.exe“ angegeben werden?</p>
</blockquote>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229721/unicode-und-createprocess</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 02:41:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229721.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Dec 2008 19:01:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unicode und CreateProcess on Mon, 15 Dec 2008 19:01:36 GMT]]></title><description><![CDATA[<p>Wollte gerade einen neuen Prozess erzeugen und per Kommandozeile den Taschenrechner aufrufen, leider hat es nicht geklappt solange das projekt den unicode zeichensatz verwendet hat. wieso?</p>
<p>zudem würde ich gerne folgende Frage beantwortet haben:</p>
<blockquote>
<p>Warum kann bei der Verwendung von Unicode beim Aufruf von CreateProcess der Parameter CmdLine nicht direkt vor Ort z.B. mit L“calc.exe“ angegeben werden?</p>
</blockquote>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630933</guid><dc:creator><![CDATA[wanderameise]]></dc:creator><pubDate>Mon, 15 Dec 2008 19:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Mon, 15 Dec 2008 19:06:56 GMT]]></title><description><![CDATA[<p>Ich verstehe Deine 1. Frage nicht!</p>
<p>SIcher kannst Du bei einem Unicode Projekt direkt die COmmandline mit L&quot;calc.exe&quot; für CreateProcess angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630935</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 15 Dec 2008 19:06:56 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Mon, 15 Dec 2008 21:56:10 GMT]]></title><description><![CDATA[<p>die art der fragestellung lässt darauf schließen das es eigentlich nicht möglcih sein <a href="http://sollte.mh" rel="nofollow">sollte.mh</a> merkwürdig!</p>
<p>zu 1.:</p>
<p>ich habe unter projekt-&gt;eigenschaften den zeichensatz auf &quot;nicht festgelegt&quot; stellen müssen um mein programm zum laufen zu bekommen. als unicode eingestellt war, lief das programm nicht!</p>
<p>hier der code:</p>
<pre><code>STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &amp;si, sizeof(si) );
si.cb = sizeof(si);

ZeroMemory( &amp;pi, sizeof(pi) );

if( !CreateProcess(

NULL, // Kein Modulname, Kommando-Zeile benutzen

&quot;calc.exe&quot;,// Kommando-Zeile

NULL, // Prozess-Handle nicht vererbbar

NULL, // Thread-Handle nicht vererbbar

FALSE, // Handle.Verebung auf FALSE 

NORMAL_PRIORITY_CLASS,  // Normale Priorität

NULL, // Eltern-Evironment-Block verwenden

NULL, // Elternverzeichnis als Startverzeichnis

&amp;si,// Zeiger auf Startup-Struktur

&amp;pi // Zeiger auf Process-Informations-Struktur

))

{
printf( &quot;CreateProcess failed (%d).\n&quot;, GetLastError() );
return;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1631013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631013</guid><dc:creator><![CDATA[wanderameise]]></dc:creator><pubDate>Mon, 15 Dec 2008 21:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 07:06:57 GMT]]></title><description><![CDATA[<p>Klar. Dieser Code kann nicht funktionieren, wenn Unicode eingestellt ist.</p>
<p>Der folgende Code geht immer:</p>
<pre><code class="language-cpp">CreateProcess(
NULL, // Kein Modulname, Kommando-Zeile benutzen
_T(&quot;calc.exe&quot;),// Kommando-Zeile
...
</code></pre>
<p>Grund: Egal auf CreateProcessA oder CreateProcessW verwendet wird. Immer wird die Zeichenkette durch den T-Makro korrekt interpretiert.</p>
<p>Der folgende Code nur in Unicode</p>
<pre><code class="language-cpp">CreateProcess(
NULL, // Kein Modulname, Kommando-Zeile benutzen
L&quot;calc.exe&quot;,// Kommando-Zeile
...
</code></pre>
<p>Aus CreateProcess wird CreateProcessW! Es wird also ein wchar_t (Unicode) String erwartet.</p>
<p>Und hier muss MBCS oder nichts eingestellt sein.</p>
<pre><code class="language-cpp">CreateProcess(
NULL, // Kein Modulname, Kommando-Zeile benutzen
&quot;calc.exe&quot;,// Kommando-Zeile
...
</code></pre>
<p>Aus CreateProcess wird CreateProcessA! Es wird also ein char String erwartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631067</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 16 Dec 2008 07:06:57 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 09:14:00 GMT]]></title><description><![CDATA[<p>Hallo Martin!</p>
<p>Dein Code geht mit Sicherheit *nicht* mit Unicode! Zumindest nicht ab VS2005!</p>
<p>Du hast die Kleinigkeit vergessen, dass der zweite Parameter beschreibbar sein muss. Und ab VS2005 werden string-literale im read-only Bereich abgelegt. Somit erzeugt dies eine Access-Violation.</p>
<p>Für eine Funktionierendes Beispeiel siehe Doku:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms682425.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms682425.aspx</a><br />
(ganz unten)</p>
<p>Dein Beispiel funktioniert nur für ANSI, da intern beschreibbarer Speicher allokiert wird um den String nach Unicode umzuwandeln <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/1631094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631094</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 16 Dec 2008 09:14:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 09:32:27 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Peinlich. Sorry!</p>
<p>Man schmeißt halt nicht alle Postings durch den Compiler...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631106</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 16 Dec 2008 09:32:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 13:03:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Warum kann bei der Verwendung von Unicode beim Aufruf von CreateProcess der Parameter CmdLine nicht direkt vor Ort z.B. mit L“calc.exe“ angegeben werden?</p>
</blockquote>
<p>also ist diese Aussage falsch bzw irreführend?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631224</guid><dc:creator><![CDATA[ameise]]></dc:creator><pubDate>Tue, 16 Dec 2008 13:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 13:20:22 GMT]]></title><description><![CDATA[<p>ameise schrieb:</p>
<blockquote>
<blockquote>
<p>Warum kann bei der Verwendung von Unicode beim Aufruf von CreateProcess der Parameter CmdLine nicht direkt vor Ort z.B. mit L“calc.exe“ angegeben werden?</p>
</blockquote>
<p>also ist diese Aussage falsch bzw irreführend?</p>
</blockquote>
<p>Was heisst hier falsch. Die Aussage ist richtig:</p>
<p>Der 2. Parameter *muss* ein beschreibarer String sein! String-Literale sind *nicht* beschreibbar, deswegen geht es nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631235</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 16 Dec 2008 13:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 14:27:27 GMT]]></title><description><![CDATA[<p>was ist ein String-Literal? Irgendwie versteh ichs nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631285</guid><dc:creator><![CDATA[wanderameise]]></dc:creator><pubDate>Tue, 16 Dec 2008 14:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 15:35:39 GMT]]></title><description><![CDATA[<p>Ich hoffe, ich darf mich hier einmal kurz mit einer eigenen Frage einschalten, das passt gerade so gut.<br />
Soweit ich weiß, benutzt Windows für seine Unicode-Darstellung UTF-16, stimmt das? Was ist denn in Windows mit Multi-Byte-Strings gemeint? Wäre nicht auch UTF-16 dem Wortverstädnis nach so etwas? Zu diesem Multi-Byte finde ich immer so wenig.<br />
Unter Windows ist folglich ein wchar_t auch ein &quot;short&quot;? Wie geht man denn mit wstrings am besten um, schließlich kann man ja in UTF-16 auch ein Zeichen aus mehreren Einzelzeichen zusammensetzen und hat somit dasselbe Problem wie mit UTF-8, aka durch Buchstaben zu iterieren ist gar nicht mal trivial.</p>
<p>Sorry, falls ich hier den Thread störe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Viele Grüße,<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631353</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 16 Dec 2008 15:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 17:56:44 GMT]]></title><description><![CDATA[<p>wanderameise schrieb:</p>
<blockquote>
<p>was ist ein String-Literal?</p>
</blockquote>
<p>&quot;abc&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631432</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 16 Dec 2008 17:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Tue, 16 Dec 2008 18:21:13 GMT]]></title><description><![CDATA[<p>Decimad schrieb:</p>
<blockquote>
<p>Soweit ich weiß, benutzt Windows für seine Unicode-Darstellung UTF-16, stimmt das?</p>
</blockquote>
<p>Genauer gesagt UCS-2, da es damals (NT3.1) noch kein UTF-16 gab <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 />
Siehe auch: UCS-2 vs. UTF-16 (not quite Kramer vs. Kramer)<br />
<a href="http://blogs.msdn.com/michkap/archive/2005/05/11/416552.aspx" rel="nofollow">http://blogs.msdn.com/michkap/archive/2005/05/11/416552.aspx</a></p>
<p>Decimad schrieb:</p>
<blockquote>
<p>Was ist denn in Windows mit Multi-Byte-Strings gemeint?</p>
</blockquote>
<p>I.d.R. meint man damit alle &quot;proprietären&quot; Zeichensätze die aus 1-n Bytes pro Codepoint bestehen.</p>
<p>Decimad schrieb:</p>
<blockquote>
<p>Wäre nicht auch UTF-16 dem Wortverstädnis nach so etwas? Zu diesem Multi-Byte finde ich immer so wenig.</p>
</blockquote>
<p>Wenn man es genau nimmt: Ja. Nur mit dem unterschied dass es hier kein *Mulit*-*Byte* ist sonder max ein *Zwei*-*Wort* <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>Decimad schrieb:</p>
<blockquote>
<p>Unter Windows ist folglich ein wchar_t auch ein &quot;short&quot;?</p>
</blockquote>
<p>naja... würde ich jetzt nicht so sagen... per default sind diese Typen ab VS2008 nicht mehr kompatibel <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>Decimad schrieb:</p>
<blockquote>
<p>Wie geht man denn mit wstrings am besten um</p>
</blockquote>
<p>Die Frage verstehe ich nicht ganz.... wstring *ist* UTF-16...</p>
<p>Decimad schrieb:</p>
<blockquote>
<p>, schließlich kann man ja in UTF-16 auch ein Zeichen aus mehreren Einzelzeichen zusammensetzen</p>
</blockquote>
<p>WAS verstehst Du unter *Zeichen*? Du kannst auch in UTF-32 ein Zeichen (Glyph) aus hunderten von Codepoints zusammensetzen!!!<br />
Ein sehr schönes Beispiel findet sich hier:<br />
<a href="http://blogs.msdn.com/michkap/archive/2006/02/17/533929.aspx" rel="nofollow">http://blogs.msdn.com/michkap/archive/2006/02/17/533929.aspx</a><br />
<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>Decimad schrieb:</p>
<blockquote>
<p>und hat somit dasselbe Problem wie mit UTF-8, aka durch Buchstaben zu iterieren ist gar nicht mal trivial.</p>
</blockquote>
<p>Wie gesagt. Das _Problem_ hast Du mit allen Codepoints; unabhängig des Encodings!</p>
<p>Siehe auch mein Artikel zu Unicode:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-161855.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-161855.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631438</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 16 Dec 2008 18:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Wed, 17 Dec 2008 21:02:33 GMT]]></title><description><![CDATA[<p>Vielen vielen Dank für die ausführliche Klärung! Ich hätte mich Ohrfeigen können, dass ich deinen Artikel dazu nicht vorher aufgetan habe, dabei bin ich selber oft jemand, der an andere Stellen verweist O.O Sorry dafür.</p>
<p>Viele Grüße,<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632104</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 17 Dec 2008 21:02:33 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und CreateProcess on Thu, 18 Dec 2008 01:34:51 GMT]]></title><description><![CDATA[<p>Er. Hm.</p>
<blockquote>
<p>Die Frage verstehe ich nicht ganz.... wstring *ist* UTF-16...</p>
</blockquote>
<p>std::wstring ist std::basic_string&lt;wchar_t&gt;, und auf Windows Plattformen ist üblich dass wchar_t 16 Bit breit ist. Das war's aber auch schon. Wenn man möchte kann man auch UTF-7 in einem std::wstring speichern. Oder die Liste der ersten so-und-so-viel Primzahlen. Oder einfach irgendwas <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>Es hat sich eingebürgert unter Windows UTF-16 Strings in std::wstring abzuspeichern, und wenn man wo einem std::wstring vor den Latz geknallt bekommt, von einem Programmteil oder einer Library die nicht dokumentiert was denn drinnen ist, dann tut man gut daran anzunehmen dass UTF-16 drinnen steht.</p>
<blockquote>
<p>naja... würde ich jetzt nicht so sagen... per default sind diese Typen ab VS2008 nicht mehr kompatibel</p>
</blockquote>
<p>Ab VS 2005 wenn ich mich richtig erinnere. VS 2003 .NET hatte default noch auf &quot;wchar_t per typedef&quot;, VS 2005 hat default bereits auf &quot;wchar_t = builtin type&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/1632209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632209</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 18 Dec 2008 01:34:51 GMT</pubDate></item></channel></rss>