質問

のstd :: wstring.c_str()は*のwchar_tを返します。

どのように私はTCHAR *へ、またはSTDからwchar_t *をから入手できます:: TCHAR *

にwstringの

おかげ

役に立ちましたか?

解決

#include <atlconv.h>

TCHAR *dst = W2T(src.c_str());

ANSIまたはUnicodeビルドでは正しいことを行います。

他のヒント

これを使用します:

wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();

TCHAR *それ以外の場合は、*シャア、* UNICODEが定義されている場合はwchar_tされるように定義されています。だからあなたのコードは次のようになります。

wchar_t* src;
TCHAR* result;
#ifdef UNICODE
result = src;
#else
//I think W2A is defined in atlbase.h, and it returns a stack-allocated var.
//If that's not OK, look at the documenation for wcstombs.
result = W2A(src);
#endif
wchar_t型がTCHARと同じサイズでなくてもよいので、

全般で、これは不可能である。

いくつかの解決策がすでに文字セット間の変換のために記載されています。文字セットが変換される範囲で重複している場合、これらが動作することができます。

次のように

私は完全に問題を回避可能な限りとセットTCHARの文字に定義された標準文字列を使用することを好むます:

typedef std::basic_string<TCHAR> tstring;

これを使用して、あなたは今も窓TCHARマクロと互換性のある標準ライブラリの互換性のある文字列を持っています。

あなたが使用することができます:

wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after

は、Windows上で動作していると仮定すると。

あなたはUnicodeのビルド構成している場合は、

、その後、TCHARwchar_tは同じものです。あなたはwchar_t用/ Zセットがtypedefであるのwchar_t対タイプであるかどうかに応じて、キャストが必要になる場合があります。

あなたはマルチバイトビルド構成にある場合、あなたはMultiByteToWideChar(とヴィーカのその逆)が必要です。

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