質問

私はライブラリを使用して送ります 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とライブラリの機能を使用して完璧に使用できます。 TCHARs1.

さらに楽しいために、他のすべての文字列関連のC ++施設も定義する必要があります TCHARs、および変換関数を作成します std::string/std::wstring <=> tstring.

幸いなことに、この作業はすでに行われています。見る ここここ.


  1. 実際、コンパイルされたライブラリ機能は本当に期待できません TCHAR *, 、 以来 TCHARSは解決されます charsまたは 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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top