std :: wstring _tchar []から変換するにはどうすればよいですか?
-
09-10-2019 - |
質問
私はライブラリを使用して送ります std::wstring
その機能の1つから、および必要な別のライブラリから _TCHAR []
それに送られる。どうすれば変換できますか?
解決
Unicode Buildを使用していると仮定すると、std :: wstring.c_str()が必要なものです。 C_STR()は、返す文字列がヌル終端であることを保証することに注意してください。
例えば
void func(const wchar_t str[])
{
}
std::wstring src;
func(src.c_str());
非ユニコードビルドを使用している場合、Unicode文字列を介してUnicode文字列に変換する必要があります widechartomultibyte.
他のヒント
として @Zach Saw 言った、あなたがユニコードのためだけに構築するならば、あなたはで逃げることができます std::wstring.c_str()
, 、しかし連続して定義する方が良いでしょう tstring
(a typedef
にとって std::basic_string<TCHAR>
)したがって、この種の文字列は、予想されるすべてのWindowsとライブラリの機能を使用して完璧に使用できます。 TCHAR
s1.
さらに楽しいために、他のすべての文字列関連のC ++施設も定義する必要があります TCHAR
s、および変換関数を作成します std::string
/std::wstring
<=> tstring
.
幸いなことに、この作業はすでに行われています。見る ここ と ここ.
- 実際、コンパイルされたライブラリ機能は本当に期待できません
TCHAR *
, 、 以来TCHAR
Sは解決されますchar
sまたはwchar_t
コンパイル時間でsですが、アイデアが得られました。
使用 ATLおよびMFCストリング変換マクロ. 。これは、コンパイルしているかどうかに関係なく機能します _UNICODE
またはANSIモード。
MFCを使用していない場合でも、これらのマクロを使用できます。この例に示す2つのATLヘッダーを含めるだけです。
#include <string>
#include <Windows.h>
#include <AtlBase.h>
#include <AtlConv.h>
int main()
{
std::wstring myString = L"Hello, World!";
// Here is an ATL string conversion macro:
CW2T pszT(myString.c_str());
// pszT is now an object which can be used anywhere a `const TCHAR*`
// is required. For example:
::MessageBox(NULL, pszT, _T("Test MessageBox"), MB_OK);
return 0;
}