方法はありますか?私のコンピューターはAMD64です。
::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);
私が使用したとき:
loadU(&str);
vS2005コンパイラはこう言います:
Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'
どうすればいいですか?
Std :: wstringオブジェクトがある場合は、c_str()
を呼び出してwchar_t*
を取得できます。
std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
ただし、狭い文字列を操作しているため、最初に幅を広げる必要があります。ここにはさまざまなオプションがあります。 1つは、Windowsの組み込み MultiByteToWideChar
ルーチンを使用することです。これにより、wchar_t*
と同等のLPWSTR
が得られます。
最初にstd :: wstringに変換します:
std::wstring widestr = std::wstring(str.begin(), str.end());
次に、C文字列を取得します。
const wchar_t* widecstr = widestr.c_str();
これはASCII文字列に対してのみ機能しますが、基になる文字列がUTF-8エンコードされている場合は機能しません。MultiByteToWideChar()などの変換ルーチンを使用すると、このシナリオが適切に処理されます。
ATLテキスト変換マクロを使用して、狭い(char)文字列を広い(wchar_t)文字列に変換できます。たとえば、std :: stringを変換するには:
#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);
コードページを指定することもできます。そのため、std :: stringにUTF-8文字が含まれている場合は、次を使用できます。
CA2W pszWide(str.c_str(), CP_UTF8);
非常に便利ですが、Windowsのみです。
Linux/Unixを使用している場合は、GNU C(ISO C 90から)で定義されているmbstowcs()およびwcstombs()を参照してください。
mbsは「Multi Bytes String」の略で、基本的には通常のゼロで終わるC文字列です。
wcsはWide Char Stringの略で、wchar_tの配列です。
ワイド文字の背景の詳細については、glibcのドキュメント here を参照してください。