Frage

Gibt es eine Methode? Mein Computer ist AMD64.

::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);

Wenn ich verwende:

loadU(&str);

der VS2005 Compiler sagt:

Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'

Wie kann ich es tun?

War es hilfreich?

Lösung

Wenn Sie eine std :: wstring Objekt haben, können Sie c_str() auf nennen es eine wchar_t* zu bekommen:

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();

Da Sie auf einem schmalen String arbeiten, aber würden Sie es zuerst erweitern müssen. Es gibt verschiedene andere Optionen; ist die Verwendung von Windows' built-in MultiByteToWideChar Routine. Das gibt Ihnen eine LPWSTR, die wchar_t* entspricht.

Andere Tipps

Zuerst wandelt es in std :: wstring:

std::wstring widestr = std::wstring(str.begin(), str.end());

erhalten Sie dann den C-String:

const wchar_t* widecstr = widestr.c_str();

Dies funktioniert nur für ASCII-Strings, aber es wird nicht funktionieren, wenn die zugrunde liegenden String UTF-8 codiert. eine Konvertierungsroutine wie MultiByteToWideChar () verwendet wird sichergestellt, dass dieses Szenario richtig gehandhabt wird.

Sie können die ATL-Text-Konvertierung Makros verwenden, um einen schmalen (char) Zeichenfolge zu einer breiten (wchar_t) umzuwandeln.

: Um zum Beispiel eines std :: string konvertieren
#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);

Sie können auch eine Codepage angeben, also, wenn Ihr std :: string UTF-8-Zeichen enthält können Sie:

CA2W pszWide(str.c_str(), CP_UTF8);

Sehr nützlich, aber nur unter Windows.

Wenn Sie auf Linux sind / Unix haben einen Blick auf mbstowcs () und wcstombs () definiert in GNU C (von ISO C 90).

  • mbs stehen für "Multi Bytes String" und ist im Grunde die üblichen Null beendet C-String.

  • wcs stehen für Wide Char String und ist ein Array von wchar_t.

Für weitere Hintergrundinformationen über breite Zeichen haben einen Blick auf glibc Dokumentation hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top