0

私はライブラリを使用していてstd::wstring、その関数の 1 つから送信し、別のライブラリ_TCHAR []に送信する必要があります。どうすれば変換できますか?

4

3 に答える 3

2

Unicode ビルドを使用していると仮定すると、必要なのは std::wstring.c_str() です。c_str() は、返される文字列が null で終了することを保証することに注意してください。

例えば

void func(const wchar_t str[])
{
}

std::wstring src;
func(src.c_str());

非 Unicode ビルドを使用している場合は、 WideCharToMultiByteを介して Unicode 文字列を非 Unicode 文字列に変換する必要があります。

于 2010-12-07T00:47:27.757 に答える
0

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;
}
于 2010-12-07T01:17:01.137 に答える
0

@Zach Sawが言ったように、Unicode のみをビルドする場合は を回避できますが、概念的には(a for )std::wstring.c_str()を定義する方がよいため、この種の文字列をすべての Windows およびライブラリ関数で問題なく安全に使用できます。s 1 .tstringtypedefstd::basic_string<TCHAR>TCHAR

追加の楽しみとして、TCHARs の他のすべての文字列関連の C++ 機能も定義し、変換関数std::string/ std::wstring<=>を作成する必要がありますtstring

幸いなことに、この作業はすでに完了しています。ここここを参照してください。


  1. s はコンパイル時にs またはsとして解決されるTCHAR *ため、実際には、コンパイルされたライブラリ関数は実際には を期待できませんが、アイデアはわかりました。TCHARcharwchar_t
于 2010-12-07T00:53:16.963 に答える