質問

何か方法はありますか?私のコンピューターは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 のドキュメントを参照してください。 ここ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top