С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218

Studio 2022 и C++20 - можно ли компилировать для Win7? И как правильно работать с кодировкой

16.01.2025, 16:30. Показов 12452. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, напомните пж, как понизить требования к платформе при разработке в последней версии студии? По умолчанию она добавляет зависимости, которых нет в семёрке, а хотелось бы универсальности. Или последний стандарт уже несовместим со старыми системами?

Почему вопрос возник... Потому что понадобилось мне вызвать однобайтовую версию API. Начал гуглить про преобразования кодировки в локальную и обнаружил, что локальной уже никто не пользуется, а однобайтовые апи теперь поддерживают юникод! И для преобразования std::wstring используют WideCharToMultiByte или вообще вот такой код:

C++
1
OutputDebugStringA(std::wstring_convert<std::codecvt_utf8<wchar_t>>().to_bytes(msg)).c_str())
Чтобы это работало, нужна минимум Win10 и строчка в манифесте приложения. Но поскольку в чужом приложении этот код работает, я так понял, что последняя версия среды разработки добавляет это автоматически. Правильно понимаю?

В общем, вопрос.. Как отказаться от этой прелести и настроиться на Win7 в качестве целевой платформы? И как по-простому преобразовать wstring в установленную локаль типа 125х

Вот такой код не слишком замороченный? Выглядит как макаронина, тут нет потенциала для упрощения?

C++
1
2
3
4
5
 define TO_LOCALE(msg) (std::is_same_v<decltype(msg), std::wstring> ? \
        std::wstring_convert<std::codecvt_byname<wchar_t, char, std::mbstate_t>>(std::locale().name()).to_bytes(msg) : \
        std::string(msg))
 
 define DBG(msg) OutputDebugStringA(std::format("{}:{} {}\n", __FUNCTION__, __LINE__, TO_LOCALE(msg)).c_str())
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2025, 16:30
Ответы с готовыми решениями:

Как установить сторонние библиотеки для C# в Visual Studio 2022
Здравствуйте товарищи. У меня проблемка появилась, которую я ни как не могу решить, вообще не получается. Проблема является то, что я не...

Можно ли на Visual Studio 2022 установить пакет разработчика .Net3.5?
Добрый день. Подскажите, можно ли на Visual Studio 2022 установить пакет разработчика .Net3.5 ? У меня что-то не хочет прикручиваться...

Расширение для Visual Studio 2022 на фреймворке Visual Studio Community Toolkit
Переписываю свое старое расширение под новую 2022 студию, вот нашел вроде хороший фреймворк:...

9
Злостный нарушитель
 Аватар для Verevkin
10249 / 5676 / 1262
Регистрация: 12.03.2015
Сообщений: 26,309
16.01.2025, 17:02
Цитата Сообщение от Postscripter Посмотреть сообщение
В общем, вопрос.. Как отказаться от этой прелести и настроиться на Win7 в качестве целевой платформы? И как по-простому преобразовать wstring в установленную локаль типа 125х
Зачем это всё? Почему бы просто не юзать юникод изначально? Тогда не надо будет ничего и никуда конвертировать.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
16.01.2025, 17:15  [ТС]
Юникодная OutputDebugStringW перехвачена , поэтому мне понадобилась А-версия
0
фрилансер
 Аватар для Алексей1153
6449 / 5644 / 1129
Регистрация: 11.10.2019
Сообщений: 15,023
16.01.2025, 21:08
Цитата Сообщение от Postscripter Посмотреть сообщение
перехвачена
кто посмел?
0
Модератор
Эксперт Java
 Аватар для alecss131
2848 / 1356 / 404
Регистрация: 11.08.2017
Сообщений: 4,329
Записей в блоге: 2
16.01.2025, 21:28
Студия это не только ценный мех... компилятор, но и IDE. Там помимо самой свежей версии компилятора v143 (2022) можно поставить так и старые v140 (2015), v141 (2017) и v142 (2019). То же касаемо WinSDK , но версии там только для Windows 10 (от 10.0.18362) и 11 (что подходит и для 10, версии 10.0.26100).
Для одной из старых версий есть компонент поддержки аж для WinXP (но deprecated).
Обязательно ли нужен C++20? Мое мнения для 20 стандартна на 7 винде студия плохой выбор. А для юникода можно воспользоваться другими либами, например icu. По идее 20 стандарт должна поддерживать и 2019 (142), поддерживает ли она 7 не знаю
1
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,404
Записей в блоге: 2
17.01.2025, 00:12
Цитата Сообщение от alecss131 Посмотреть сообщение
2015
это вроде крайняя, которую можно поставить в win7 и пытаться собирать что-то с -D _WIN32_WINNT=0x0501 для XP.
Но в самом коде бывает то что и компилятор поймёт и в .lib найдёт... а по факту для dll какой-то <= vista
даже собирая под самой XP , каким-нибудь 2010... bcrypt.dll какую-нибудь притянет, только ради навороченного rand() :)

С манифестами тоже муть какая-то , вроде на ucrt собирают... и половина .exe даже запускается и работает в XP,
но в каком-то попадается это <manifest ...v2> и всё ,) зря только качал это winlib_mingw-ucrt ))
1
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
17.01.2025, 04:20  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
кто посмел?
Обещаю вернуть как было, когда закончу Работаю в x64dbg с чужим плагином, он разговорчивый и пишет там всякое в журнал (да и хост тоже), а я в своей библиотеке этот момент отслеживаю.

Цитата Сообщение от ft4l Посмотреть сообщение
2015
это вроде крайняя, которую можно поставить в win7
Для разработки у меня есть Win11, тут надо чтобы именно готовый продукт запускался на широком диапазоне систем. Прогуглю момент флагами -D _WIN32_WINNT

Цитата Сообщение от alecss131 Посмотреть сообщение
Обязательно ли нужен C++20?
Да не особо. Но с ним код становится проще, там работа со строками - std::transform с лямбдами, std::format, ends_with, инициализация нестатических переменных в описании класса...

Ладно, я понял, придётся свои хотелки ограничивать)
0
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,404
Записей в блоге: 2
17.01.2025, 05:12
Цитата Сообщение от Postscripter Посмотреть сообщение
момент флагами -D _WIN32_WINNT
Для WINAPI вообще-то юзается
[QUOTE]Using the Windows Headers
...
The following table indicates the common macros you must define to target each major operating system release. (Individual header files may use different macros; therefore, if compilation problems occur, check the header file that contains the definition for conditional definitions.)

Minimum system required Macros to define
Windows Server 2003 _WIN32_WINNT>=0x0502 WINVER>=0x0502
Windows XP _WIN32_WINNT>=0x0501 WINVER>=0x0501
 
...

Internet Explorer 6.0 _WIN32_IE>=0x0600
Internet Explorer 5.6 _WIN32_IE>=0x0560
...

Но оно и при кросспламформенном задействуется обычно.

Для CRT оно там вроде всё predefined... взависмости от версии компилятора
может только флаги ещё на них влияют, и кросскомпиляция 32-битным с _WIN64.

А насчёт чего-то моложе 2010 я совсем не при делах )) ... ucrt там или msvcrt или на выбор RunTime.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
17.01.2025, 05:42  [ТС]
Так совместимость как раз ломают две вещи. Слишком свежий сишный рантайм (как его выбирать я тоже хз пока, наверно никак) и всякие versioned api, которые xxx-l1-1-1.dll Надо будет разобраться (никогда не пользовался ей), влияет ли эта директива на выбор версии winapi. И насколько старые апи ещё поддерживаются. То есть, если я в 2025 году вдруг объявлю директиву _WIN32_WINNT_WIN7, изменится ли в таблице импорта kakaya-to-hren-l1-1-1.dll на kernel32.dll
0
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,404
Записей в блоге: 2
17.01.2025, 07:13
Цитата Сообщение от Postscripter Посмотреть сообщение
kakaya-to-hren-l1-1-1.dll
К меня в XP даже такие прилетели ... с каким-то rеdist 140 или не с ним... не помню

ucrtbase.dll
и ровно 40 штук api-ms-win-*****-l1-1-0.dll

...

Запустил сейчас в семёрке какое-то новое AIO/AllInOne-redist
таких файлов 65, и только один с еденичкой в конце... возможно раньше чего-то я подсовывал ))... или нет
распаковал winlibs-i686-posix-dwarf-gcc-14.2.0-mingw-w64ucrt-12.0.0-r2.7z
... прошлогоднее вроде
и работает gcc --help
А в XPx64(0x0502) тчно жаловалось на манифест... на что-то с .v1
такой вроде он полностью
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
 <application>
  <windowsSettings>
   <activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
  </windowsSettings>
 </application>
</assembly>
Но там ещё куча файлов с зависимостями от этих api-ms-win....-l1-1-0.dll но без манифеста,
и они работали и там... а зависимости во всех вроде находило и находило в /system32/
...
Получается что .NET==4.0 в XP это не нравится, а .NET==4.6.1 в семёрке нормально заходит.
Если не ошибаюсь...
... с 4.6 в win7 тоже какие-то танцы были... на чистую свежую ось ставилось вместе VS какой-то, а на чуть поезженную ни в какую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2025, 07:13
Помогаю со студенческими работами здесь

Как правильно установить звуковой драйвер для Win7?
Как правильно установить звуковой драйвер для Win7? Помогите пожалуйста!!! Уже запарились.

Как заставить работать лпт порт для программы Mach3 на Win7 x64?
Всем доброго времени суток. Возможно ли запустить LPT-порт на 64-разрядной системе? Находил информацию про inpout32, но так и не смог никак...

Как правильно компилировать?
Вопрос наверное звучит очень глупо и миллион раз поднимался, но ответа найти ни в гугле ни на форуме я не смог. Мне даже не нужна...

Как правильно компилировать?
Все доброе время суток. Народ, не подскажете как компилировать программы написанные в Pascal ABC через Delphi 7? Я открываю свой файл...

Подключение библиотек для C в visual studio 2022
Хочу подключить в проект 2 библиотеки для работы со звуком. PortAudio я установил с помощью NuGet в самой визуалке. А libmpg123 скачал с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru