Невозможно использовать CA2CT и CW2T в Visual Studio 2022, если указан C++20.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Невозможно использовать CA2CT и CW2T в Visual Studio 2022, если указан C++20.

Сообщение Anonymous »

У меня возникла проблема при использовании C++20 с Visual Studio 2022:
Например: ошибка C2440: «инициализация»: невозможно преобразовать из ATL::CA2W в ATL::CStringT

Если я вернусь к C++17, это нормально.
Почему?

Вот пример:

Код: Выделить всё

CLSID AppCLSID ;
if (SUCCEEDED(::CLSIDFromProgID(CT2W(rstrProgID), &AppCLSID) ) )
{
LPOLESTR pszName = NULL ;
if (SUCCEEDED(::ProgIDFromCLSID(AppCLSID, &pszName) ) )
{
CString strAppID = CW2T(pszName);
}
}
Обратите внимание, что rStrProgId может иметь значения типа _T("Word.Application").
В приведенном выше конкретном случае ошибка:

ошибка C2440: 'инициализация': невозможно преобразовать из ATL::CW2W в ATL::CStringT


Другие фрагменты кода в качестве примеров:
Пример 2

Код: Выделить всё

CString strCalendarName = CA2CT(pName->GetText(), CP_UTF8);
(значение pName->GetText() — const char *).

Обновить
Выполнение того, что говорит @Inspectable, решает одну проблему.
Остальные (примеры), которые не компилируются такие:

Код: Выделить всё

std::string s1 = CT2A(strNameText);
CString strStudent1 = CA2CT(pElement1->GetText(), CP_UTF8);
Есть и другие проблемы компиляции, но я чувствую, что они выходят за рамки этого вопроса.

Подробнее здесь: https://stackoverflow.com/questions/699 ... -specified
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»