<?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[Wie bekommt man einen WCHAR* aus einem std::string?]]></title><description><![CDATA[<p>Ich habe im Forum allerlei Einträge zu verwandten Fragen gefunden und jetzt bereits zwei Stunden mit Versuchen verbracht, irgendwas funktionierendes hinzubekommen. Aber bis jetzt hat nichts funktioniert.<br />
Also, ich möchte folgende Funktion benutzen:</p>
<pre><code class="language-cpp">BOOL WINAPI CreateProcessWithLogonW(CONST WCHAR* lpUsername, CONST WCHAR* lpDomain, CONST WCHAR* lpPassword, ...);
</code></pre>
<p>Allerdings soll Sie in eine Funktion folgender Form eingebaut werden:</p>
<pre><code class="language-cpp">void programm_starten_als(const std::string&amp; Benutzername, const std::string&amp; Domain, const std::string&amp; Passwort,...);
</code></pre>
<p>Ich muss also irgendwie eine möglichst saubere Konvertierung von std::string zu einem WCHAR*-String hinbekommen. Wie könnte man das bewerkstelligen? Was problemlos geht, ist direkt einen WCHAR-Array in die Funktion einzusetzen:</p>
<pre><code class="language-cpp">CreateProcessWithLogonW(L&quot;Benutzer&quot;,...);
</code></pre>
<p>Aber das ist noch keine Lösung, ich kann ja nicht alles in den Quellcode reinschreiben <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>Vielleicht hilft folgender Typedef aus der winnt.h:</p>
<pre><code class="language-cpp">typedef wchar_t WCHAR;
typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
</code></pre>
<p>Vielen Dank schonmal <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/topic/191004/wie-bekommt-man-einen-wchar-aus-einem-std-string</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 18:55:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191004.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Aug 2007 06:24:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie bekommt man einen WCHAR* aus einem std::string? on Wed, 29 Aug 2007 06:24:25 GMT]]></title><description><![CDATA[<p>Ich habe im Forum allerlei Einträge zu verwandten Fragen gefunden und jetzt bereits zwei Stunden mit Versuchen verbracht, irgendwas funktionierendes hinzubekommen. Aber bis jetzt hat nichts funktioniert.<br />
Also, ich möchte folgende Funktion benutzen:</p>
<pre><code class="language-cpp">BOOL WINAPI CreateProcessWithLogonW(CONST WCHAR* lpUsername, CONST WCHAR* lpDomain, CONST WCHAR* lpPassword, ...);
</code></pre>
<p>Allerdings soll Sie in eine Funktion folgender Form eingebaut werden:</p>
<pre><code class="language-cpp">void programm_starten_als(const std::string&amp; Benutzername, const std::string&amp; Domain, const std::string&amp; Passwort,...);
</code></pre>
<p>Ich muss also irgendwie eine möglichst saubere Konvertierung von std::string zu einem WCHAR*-String hinbekommen. Wie könnte man das bewerkstelligen? Was problemlos geht, ist direkt einen WCHAR-Array in die Funktion einzusetzen:</p>
<pre><code class="language-cpp">CreateProcessWithLogonW(L&quot;Benutzer&quot;,...);
</code></pre>
<p>Aber das ist noch keine Lösung, ich kann ja nicht alles in den Quellcode reinschreiben <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>Vielleicht hilft folgender Typedef aus der winnt.h:</p>
<pre><code class="language-cpp">typedef wchar_t WCHAR;
typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
</code></pre>
<p>Vielen Dank schonmal <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/1354277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354277</guid><dc:creator><![CDATA[Wirdbald]]></dc:creator><pubDate>Wed, 29 Aug 2007 06:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie bekommt man einen WCHAR* aus einem std::string? on Wed, 29 Aug 2007 06:31:10 GMT]]></title><description><![CDATA[<p>Mit der CRT Funktion wcstombs zum Beispiel.<br />
<a href="http://msdn2.microsoft.com/en-us/library/5d7tc9zw(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/5d7tc9zw(VS.80).aspx</a></p>
<p>Oder noch einfacher mit den entsprechenden ATL T-Makros.<br />
CW2A oder W2A</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354280</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 29 Aug 2007 06:31:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wie bekommt man einen WCHAR* aus einem std::string? on Wed, 29 Aug 2007 06:32:33 GMT]]></title><description><![CDATA[<p>deine Funktion ist für Unicode. Wenn du deine Projektoptionen auf Unicode umstellst, sollte alles ganz normal mit c_str klappen.<br />
Versuch das mal, andere strings musst du dann aber auch als unicode eingeben, am besten du machst um alle strings mal ein _T(&quot;deinstring&quot;), damit wird je nachdme ob unicode oder nicht der text gehandhabt.</p>
<p>So, wenn das nicht geht, gibt es noch die Funktion MultibyteToWideChar aber die ist echt mistig zu bedienen.</p>
<p>Und dann gibt es noch google:<br />
<a href="http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst336.htm" rel="nofollow">http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst336.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354281</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 29 Aug 2007 06:32:33 GMT</pubDate></item><item><title><![CDATA[Reply to Wie bekommt man einen WCHAR* aus einem std::string? on Wed, 29 Aug 2007 06:44:17 GMT]]></title><description><![CDATA[<p>Maxi schrieb:</p>
<blockquote>
<p>deine Funktion ist für Unicode. Wenn du deine Projektoptionen auf Unicode umstellst, sollte alles ganz normal mit c_str klappen.</p>
</blockquote>
<p>Nee... da sich std::string unbeeindruckt der Compiler-Defines zeigt...</p>
<p>Entweder er ändert std::string nach std:.wstring ab oder er verwendet die von Martin vorgeschlagenen Makros (oder er macht das was die Makros machen von &quot;Hand&quot; mittels MultiByteToWideChar&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354285</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 29 Aug 2007 06:44:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wie bekommt man einen WCHAR* aus einem std::string? on Wed, 29 Aug 2007 07:45:56 GMT]]></title><description><![CDATA[<p>Hm,<br />
also wcstombs geht wohl nicht, das scheint eine Konvertierung in die falsche Richtung zu sein:</p>
<blockquote>
<p>&quot;Converts a sequence of wide characters to a corresponding sequence of multibyte characters&quot;</p>
</blockquote>
<p>MultiByteToWideChar scheint das Beste zu sein, ich schreibe mir dann eine Hilfsfunktion damit. Ich habe zum Testen einmal Folgendes geschrieben und <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> es klappt!</p>
<pre><code class="language-cpp">string username = &quot;Benutzername&quot;;
const size_t username_size = username.size()+1;
const char* cUsername = username.c_str();
WCHAR wUsername[256];
MultiByteToWideChar(CP_OEMCP         // UINT CodePage
                   ,MB_PRECOMPOSED   // DWORD dwFlags
                   ,cUsername        // LPCSTR lpMultiByteStr
                   ,username_size    // int cbMultiByte
                   ,wUsername        // LPWSTR lpWideCharStr
                   ,256);            // int cchWideChar
</code></pre>
<p>Also vielen Dank! <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>P.S.<br />
Sieht hier zufällig einer noch einen fatalen Fehler...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354312</guid><dc:creator><![CDATA[Wirdbald]]></dc:creator><pubDate>Wed, 29 Aug 2007 07:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wie bekommt man einen WCHAR* aus einem std::string? on Wed, 29 Aug 2007 08:42:43 GMT]]></title><description><![CDATA[<p>Ja, du solltest die Größe des Zielbereichs schon deinen Erwartungen anpassen (du erwartest 'username_size' Zeichen).</p>
<p>PS: Wenn du nicht wirklich auf std::string festgelegt bist, nimm lieber seinen Bruder std::wstring.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354334</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Aug 2007 08:42:43 GMT</pubDate></item></channel></rss>