понедельник, 2 марта 2015 г.

c++ (cpp) std::string в wchar_t*

Конвертация типа std::string в wchar_t*. 



wchar_t* StrToWstr(const std::string &aString)
{
    // чтобы не делать каждый раз new создадим некоторый буфер заранее
    const int maxSize = 1024 * 1024; // 1Мб символов
    static wchar_t buff[maxSize];

    int nSize = ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), NULL, NULL);

    wchar_t *tBuff = buff;
    if (nSize > maxSize)
    {
        // пытаемся выделить память только если не хватило
        tBuff = new wchar_t[nSize];
    }
    if (nSize <= 0 && tBuff == NULL)
        return L"";

    ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), buff, nSize);

    wchar_t* result(tBuff);

    if (tBuff != buff)
        delete[] tBuff;

    return result;
}