Как мне конвертировать из std :: wstring _TCHAR []? - PullRequest
0 голосов
/ 07 декабря 2010

Я использую библиотеку и отправляю мне std::wstring от одной из ее функций, а другую библиотеку, которая требует _TCHAR [] для отправки на нее. Как я могу преобразовать это?

Ответы [ 3 ]

2 голосов
/ 07 декабря 2010

Предполагая, что вы используете сборку Unicode, std :: wstring.c_str () - это то, что вам нужно.Обратите внимание, что c_str () гарантирует, что возвращаемая строка завершается нулем.

например,

void func(const wchar_t str[])
{
}

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

Если вы используете сборку не в Юникоде, вам необходимо преобразовать Юникодстрока в строку, отличную от Unicode, через WideCharToMultiByte .

0 голосов
/ 07 декабря 2010

Используйте макросы преобразования строк ATL и MFC . Это работает независимо от того, используете ли вы компиляцию в режиме _UNICODE или ANSI.

Вы можете использовать эти макросы, даже если вы не используете MFC. Просто включите два заголовка 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;
}
0 голосов
/ 07 декабря 2010

Как сказал @ Zach Saw , если вы строите только для Unicode, вы можете обойтись без std::wstring.c_str(), но на практике было бы лучше определить tstring (typedef для * 1006). *) так что вы можете безопасно использовать этот тип строки со всеми функциями Windows и библиотек, которые ожидают TCHAR s 1 .

Для дополнительного удовольствия вы должны также определить все другие связанные со строками средства C ++ для TCHAR s и создать функции преобразования std::string / std::wstring <=> tstring.

К счастью, эта работа уже выполнена; см здесь и здесь .

<Ч />
  1. На самом деле ни одна функция скомпилированной библиотеки не может ожидать TCHAR *, поскольку TCHAR s разрешаются как char s или wchar_t s во время компиляции, но вы поняли.
...