ライブラリを使用していて、その機能の1つからstd::wstring
を、_TCHAR []
を送信する必要がある別のライブラリを送信しています。どうすれば変換できますか?std :: wstring _TCHAR []から変換するにはどうすればよいですか?
答えて
あなたがUnicodeビルドを使用していると仮定すると、std :: wstring.c_str()が必要です。 c_str()は、返される文字列がヌルで終了することを保証します。
void func(const wchar_t str[])
{
}
std::wstring src;
func(src.c_str());
あなたは非Unicodeビルドを使用している場合は、WideCharToMultiByteを経由して非Unicode文字列にUnicode文字列を変換する必要があります。
@Zachはあなたはユニコードのためにのみビルドする場合は、std::wstring.c_str()
で逃げることができ、言ったが、conteptually tstring
(std::basic_string<TCHAR>
用typedef
)を定義する方が良いだろうので、あなたが安全に、文字列のこの種を使用することができます見通り完全にWindowsとライブラリの機能を完全にTCHAR
s と期待しています。
TCHAR
のためにも他のすべての文字列に関連するC++の機能を定義し、変換関数std::string
/std::wstring
< =>tstring
を作成する必要があります。 幸いにも、この作業はすでに完了しています。 hereおよびhereを参照してください。
- 実際
TCHAR
sはコンパイル時にchar
秒またはwchar_t
のように解決されているので、何もコンパイルされたライブラリ関数は、本当に、TCHAR *
を期待することはできませんが、あなたはアイデアを得ました。
C++ライブラリは 'TCHAR *'を期待できます。結局のところ、C++は引数の型をオーバーロードしています。それは珍しいビルドですが、MSVCの名前のマングリングはそれを処理することができます。ほとんどのWin32 DLLもTCHARを期待していますが、名前のマングリングは "A/W"接尾辞マクロを介してセットアップされています。 – MSalters
コンパイルされたC++ライブラリは本当に 'TCHAR *'を期待できません。二つの別々の(オーバーロードされた)関数を持ち、 'char *'を受け入れる関数と 'wchar_t *'を受け入れる関数です。 '_UNICODE'マクロです。それは私が自分の注釈で意図したものでした。 –
ATL and MFC String Conversion Macrosを使用してください。これは、_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;
}
- 1. _tchar *をwstringに変換したい
- 2. UTF-8 std :: stringをUTF-16 std :: wstringに変換するにはどうすればよいですか?
- 3. * charを_TCHARに変換するにはどうすればよいですか?
- 4. wchar_t *をwstringに変換するにはどうすればよいですか?
- 5. std :: wstringのバイトサイズを取得するにはどうすればよいですか?
- 6. TCHARをintに変換するにはどうすればいいですか
- 7. どのようにSTDを変換する方法:はstd :: wstringのために、ベクター<wchar_t>
- 8. functionbodyをlambdaに変換するにはどうすればよいですか?
- 9. SimpleIniを使用してwchar_tを返し、std :: wstringに変換するにはどうすればよいですか?
- 10. コンソールからの入力をwchar_t変数に格納するにはどうすればよいですか?
- 11. 出力をostream_iteratorから文字列に変換するにはどうすればよいですか?
- 12. wstringをLPOLESTRに変換するには?
- 13. 変換演算子でstd :: enable_ifを使用するにはどうすればよいですか?
- 14. std :: numeric_limits <float> :: epsilon()をcで変換するにはどうすればよいですか?
- 15. std :: vector <float>をfloat配列に変換するにはどうすればよいですか?
- 16. std :: functionラッパーをvariadic関数に変換するにはどうすればよいですか?
- 17. の変換C++のstd :: wstringのにUTF8でのstd :: codecvt_xxx
- 18. C++はstd :: stringからstd :: wstringへデータをコピーします
- 19. C++ 0xは、UTF-8バイトシーケンスとのstd :: wstring変換をサポートしていますか?
- 20. vC++のstd :: string/std :: wstringのマクロは何ですか? MSDNによると
- 21. std :: string&std :: wstringからchar整数値を取得する
- 22. NTSTATUSから返された正しいコードに変換するにはどうすればよいですか?
- 23. 行列をMatlabからPythonに変換するにはどうすればよいですか?
- 24. Lucene.Net:MultiFiledQueryParserをBooleanQueryに変換するにはどうすればよいですか?
- 25. ハッシュタグテキストをハッシュタグハイパーリンクに変換するにはどうすればよいですか?
- 26. CodeVariableDeclarationStatementをCodeAssignmentStatementに変換するにはどうすればよいですか?
- 27. intをNSStringに変換するにはどうすればよいですか?
- 28. TDateTimeをFILETIMEに変換するにはどうすればよいですか?
- 29. StreamWriterをストリームに変換するにはどうすればよいですか?
- 30. string []をArrayListに変換するにはどうすればよいですか?
他のライブラリは** const ** _TCHAR []を受け入れますか?つまり、データを変更する予定ですか?もしそうなら、**データを**延長することができますか? –
はい、const _TCHAR []は大丈夫です。データを変更するつもりはありません。 – coolface
_TCHARとは何ですか? _TCHARは、Unicodeビルドではwchar_tとして定義されますが、Unicode以外のビルドではcharとして定義されます。 –