Преобразование CString в строку (VC6)

Я хочу преобразовать CString в строку. (Ага. Я знаю, что делаю. Я знаю, что возвращенная строка будет неверной, если диапазон значений CString находится за пределами ANSI, но это нормально!)

Следующий код будет работать под VC2008.

std::string Utils::CString2String(const CString& cString) 
{
    // Convert a TCHAR string to a LPCSTR
    CT2CA pszConvertedAnsiString (cString);

    // construct a std::string using the LPCSTR input
    std::string strStd (pszConvertedAnsiString);

    return strStd;
}

Но в VC6 нет макроса CT2CA. Как я могу заставить код работать и в VC6, и в VC2008?


person Cheok Yan Cheng    schedule 02.06.2010    source источник
comment
Вы компилируете Unicode? То есть CString содержит символы Unicode? Кроме того, почему, почему вы используете VC6? Ему двенадцать лет !!   -  person Dean Harding    schedule 02.06.2010
comment
Мы компилируем как в Unicode, так и в многобайтовом формате. Привет! Вы когда-нибудь слышали об огромной базе кода наследия?   -  person Cheok Yan Cheng    schedule 02.06.2010


Ответы (2)


Microsoft утверждает, что CT2CA заменяет T2CA, поэтому попробуйте последнее и посмотрите, это работает.

person jdigital    schedule 02.06.2010
comment
USES_CONVERSION; std :: string str = T2CA ((LPCTSTR) cString)); - person Gunslinger47; 06.06.2010

Поскольку вам не нужны символы вне диапазона ANSI, подойдет грубая сила.

std::string Utils::CString2String(const CString& cString) 
{
    std::string strStd;

    for (int i = 0;  i < cString.GetLength();  ++i)
    {
        if (cString[i] <= 0x7f)
            strStd.append(1, static_cast<char>(cString[i]));
        else
            strStd.append(1, '?');
    }

    return strStd;
}
person Mark Ransom    schedule 02.06.2010