ライブラリを使用していて、その機能の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. UTF-8 std :: stringをUTF-16 std :: wstringに変換するにはどうすればよいですか?
- 2. * charを_TCHARに変換するにはどうすればよいですか?
- 3. wchar_t *をwstringに変換するにはどうすればよいですか?
- 4. std :: wstringのバイトサイズを取得するにはどうすればよいですか?
- 5. SimpleIniを使用してwchar_tを返し、std :: wstringに変換するにはどうすればよいですか?
- 6. wstringをLPOLESTRに変換するには?
- 7. 変換演算子でstd :: enable_ifを使用するにはどうすればよいですか?
- 8. std :: vector <float>をfloat配列に変換するにはどうすればよいですか?
- 9. C++ 0xは、UTF-8バイトシーケンスとのstd :: wstring変換をサポートしていますか?
- 10. C++はstd :: stringからstd :: wstringへデータをコピーします
- 11. std :: string&std :: wstringからchar整数値を取得する
- 12. vC++のstd :: string/std :: wstringのマクロは何ですか? MSDNによると
- 13. std :: bitset <64>をダブルに変換するにはどうすればいいですか?
- 14. オーディオをテキストに変換するにはどうすればよいですか?
- 15. ソフトウェアアプリケーションをソフトウェアアプライアンスに変換するにはどうすればよいですか?
- 16. JSONArrayをJSONObjectに変換するにはどうすればよいですか?
- 17. byte []をBitmapに変換するにはどうすればよいですか?
- 18. SqlXmlをXmlTextに変換するにはどうすればよいですか?
- 19. LFをCRLFに変換するにはどうすればよいですか?
- 20. ハッシュタグテキストをハッシュタグハイパーリンクに変換するにはどうすればよいですか?
- 21. UTCをDateTimeに変換するにはどうすればよいですか?
- 22. string []をArrayListに変換するにはどうすればよいですか?
- 23. NSStringをNSDateに変換するにはどうすればよいですか?
- 24. Lucene.Net:MultiFiledQueryParserをBooleanQueryに変換するにはどうすればよいですか?
- 25. System.TypeをUriに変換するにはどうすればよいですか?
- 26. バイトをmbに変換するにはどうすればよいですか?
- 27. StringReaderをStringに変換するにはどうすればよいですか?
- 28. 'System.Windows.Media.Imaging.BitmapImage'を 'System.Drawing.Image'に変換するにはどうすればよいですか?
- 29. NSStringをNSDataに変換するにはどうすればよいですか?
- 30. TBytesをRawByteStringに変換するにはどうすればよいですか?
他のライブラリは** const ** _TCHAR []を受け入れますか?つまり、データを変更する予定ですか?もしそうなら、**データを**延長することができますか? –
はい、const _TCHAR []は大丈夫です。データを変更するつもりはありません。 – coolface
_TCHARとは何ですか? _TCHARは、Unicodeビルドではwchar_tとして定義されますが、Unicode以外のビルドではcharとして定義されます。 –