(20.06.2025 14:37)daemon_n Wrote: [ -> ]wog native dialogs.era
game bug fixes extended.dll
Проверил. С предыдущей попытки ничего не поменялось. Оба плагина по-прежнему не подгружаются на Windows 2003.
Хотя сама ЭРА запускается без проблем, и даже bik-видео плагин работает без косяков. Но 2 нерабочих на Windows 2003 плагина не оставляют выбора - возможно,
igrik их сможет отлучить от функции кернела, которой нет в старых виндовозах, а может и нет.

XEPOMAHT, это очень странно.. я использую тулзы для поддержки windows XP
попробую ещё пошаманить.. в худшем случае поставлю студию более старой версии
Ну, что я могу сказать - адаптировать плагины я не смогу (либо это слишком трудозатратно, а мне это не интересно).
Причина - используются многие "уфь какие новые фичи" (сарказм), которые не поддерживаются в MSVC 2008 (C++03):
Code:
auto (min C++11) Нет в C++03
nullptr (min C++11) Нет в C++03
Лямбды (min C++11) Нет в C++03
constexpr (min C++11) Нет в C++03
<cstdint> (min C++11) Только <stdint.h> в некоторых SDK
Все свои версии плагинов я намеренно держал в "Microsoft Visual C++ 2008 Express Edition" для поддержки древних машин.
Так что XEPOMAHT, извини. Но я попытался
Code:
Версия MSVC Год Поддержка C++11
Visual Studio 2015 (MSVC 19.0) — это первая версия, где C++11 реализован почти полностью.**
MSVC 16.0 (VS 2019) 2019 C++11, C++14, C++17, частично C++20
MSVC 15.0 (VS 2017) 2017 C++11, C++14, частично C++17
MSVC 14.0 (VS 2015) 2015 C++11 (почти полностью)
MSVC 12.0 (VS 2013) 2013 Частичная поддержка C++11 (нет constexpr, ограниченный <thread>)
MSVC 11.0 (VS 2012) 2012 Очень частичная поддержка (базовые фичи вроде auto, nullptr)
MSVC 10.0 (VS 2010) 2010 ❌ Почти нет C++11 (только static_assert и auto в простейших случаях)
А вообще, реально давно пора бы обновить машину. Хошь, безвозмездно отправлю тебе планку DDR3 8GB и проц Ryzen 1500X. Всё равно они без дела валяются
igrik, так вот именно это и должно решаться тулзами для поддержки win xp.
Поставлю 2019 студию, наверно, или просто заменю "новые фичи" на оригинал. Хотя проблема может быть в ещё в era.cpp.

У Хероманта ругается на функцию "InitializeCriticalSectionEx".
Вот нужно сюда копать, вроде как. А для неё минимальная версия Windows: Vista+ (_WIN32_WINNT >= 0x0600)
Code:
#if (_WIN32_WINNT >= 0x0600)
InitializeCriticalSectionEx(&cs, 2000, 0);
#else
InitializeCriticalSectionAndSpinCount(&cs, 2000);
#endif
Но тут я уже не очень хорошо волоку...
Quote:Поставлю 2019 студию, наверно, или просто заменю "новые фичи" на оригинал. Хотя проблема может быть в ещё в era.cpp
Так что 2019-я студия тебе не поможет
(24.06.2025 21:33)igrik Wrote: [ -> ]Все свои версии плагинов я намеренно держал в "Microsoft Visual C++ 2008 Express Edition" для поддержки древних машин.
Твои оригинальные исходники можно пересобрать под последнюю версию era.dll?
В текущий момент времени я не знаю, что там были за изменения в era.dll.
Ранее, плагины не были привязаны к версии era.dll 2.8.7 и выше.
Поэтому, мои версии по идее должны работать и с текущей версией эры.
А если не работают, то значит ответ на твой вопрос таков - мои версии уже нельзя пересобрать.
(24.06.2025 22:16)igrik Wrote: [ -> ]У Хероманта ругается на функцию "InitializeCriticalSectionEx".
Вот нужно сюда копать, вроде как. А для неё минимальная версия Windows: Vista+ (_WIN32_WINNT >= 0x0600)
Code:
#if (_WIN32_WINNT >= 0x0600)
InitializeCriticalSectionEx(&cs, 2000, 0);
#else
InitializeCriticalSectionAndSpinCount(&cs, 2000);
#endif
Но тут я уже не очень хорошо волоку...
Здравствуйте! Вот самый правильный код:
Пример ассемблер:
Процедура "Инициализации"
Code:
push [Kernel32_dll];String
call dword[LoadLibraryA]
.if eax
push ebx
mov ebx,eax
push [InitializeCriticalSectionEx];String;
push ebx
call dword[GetProcAddress]
.if eax
mov byte[InitializeCriticalSection_BAPIAHT],1
.elseif
push [InitializeCriticalSectionAndSpinCount]; String
push ebx
call dword[GetProcAddress]
.if eax
mov byte[InitializeCriticalSection_BAPIAHT],2
.elseif
pop ebx
invoke MessageBox,0,[StringMessageText_InitializeCriticalSectionERROR],dword[StringMessageTitle_InitializeCriticalSectionERROR],0 ; даём о себе знать!
invoke Exit
ret
.endif
.endif
pop ebx
.endif
Любая процедура. Пример:
Code:
if (InitializeCriticalSection_BAPIAHT == 1)
InitializeCriticalSectionEx(&cs, 2000, 0);
else
InitializeCriticalSectionAndSpinCount(&cs, 2000);
endif
Вот и всё =))).
(24.06.2025 22:16)igrik Wrote: [ -> ]Quote:Поставлю 2019 студию, наверно, или просто заменю "новые фичи" на оригинал. Хотя проблема может быть в ещё в era.cpp
Так что 2019-я студия тебе не поможет
Поможет студия
2019 2017, так как там нормальный Toolset есть в каталоге, который полностью поддерживает winxp -
Visual Studio 2017 - Windows XP (v141_xp)
К сожалению, он не заводится на студии 2022.
Я это всё ранее проверял. Остался бы на 2019, но в ней нет поддержки Copilot
Grok Wrote:Подключение toolset v141_xp для Visual Studio 2022 Community, чтобы обеспечить совместимость с Windows XP, действительно представляет проблему, так как Microsoft официально прекратила поддержку этого toolset в новых версиях Visual Studio, и он не включён по умолчанию в установщик VS 2022. Однако, есть несколько путей решения, основанных на доступной информации и технических подходах. Вот пошаговая инструкция:
---
### 1. **Проверка доступности v141_xp в Visual Studio 2022**
Toolset v141_xp (C++ Windows XP Support for VS 2017) официально помечен как устаревший (deprecated) в Visual Studio 2019 и выше, а в VS 2022 он не поставляется по умолчанию. Однако, его всё ещё можно установить вручную через определённые компоненты, если они доступны в установщике.
- **Шаг 1**: Откройте Visual Studio Installer.
- **Шаг 2**: Выберите "Изменить" (Modify) для установленной версии Visual Studio 2022 Community.
- **Шаг 3**: Перейдите на вкладку **"Отдельные компоненты"** (Individual Components).
- **Шаг 4**: В разделе **"Компиляторы, инструменты сборки и среды выполнения"** (Compilers, build tools, and runtimes) найдите компонент **"C++ Windows XP Support for VS 2017 (v141) tools [Deprecated]"**.
- Если он там есть, отметьте его для установки.
- Если компонент отсутствует, это подтверждает, что v141_xp не включён в VS 2022 по умолчанию.
**Примечание**: Если компонент не отображается, это может означать, что Microsoft полностью исключила его из установщика VS 2022. В таком случае переходите к следующим шагам.
---
### 2. **Установка v141_xp через Visual Studio 2017 или 2019**
Поскольку v141_xp изначально был частью Visual Studio 2017 и поддерживался в ранних версиях Visual Studio 2019 (до 16.4), вы можете установить его из этих версий и использовать в VS 2022.
- **Вариант 1: Установка Visual Studio 2017 Community**
1. Скачайте Visual Studio 2017 Community с официального сайта Microsoft: [Older Downloads](https://visualstudio.microsoft.com/vs/ol...wnloads/).[](https://visualstudio.microsoft.com/ru/vs...ownloads/)
- Для этого может потребоваться подписка Visual Studio (MSDN), но вы можете создать бесплатную учётную запись Microsoft, если её нет.
2. В установщике Visual Studio 2017 выберите **"Desktop development with C++"** и убедитесь, что включён компонент **"C++ Windows XP Support for VS 2017 (v141)"**.
3. После установки проверьте, что v141_xp toolset доступен в папке установки Visual Studio 2017 (обычно в `C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\`).
4. В Visual Studio 2022 настройте проект для использования v141_xp:
- Откройте свойства проекта (Project Properties).
- В разделе **"Configuration Properties > General"** выберите **Platform Toolset** как `v141_xp`.
- Убедитесь, что пути к библиотекам и заголовочным файлам из VS 2017 указаны в настройках проекта.
- **Вариант 2: Использование Visual Studio 2019 (версия 16.4 или ранее)**
1. Скачайте Visual Studio 2019 (версия 16.4 или более ранняя) через [Older Downloads](https://visualstudio.microsoft.com/vs/ol...wnloads/).[](https://visualstudio.microsoft.com/ru/vs...ownloads/)
2. В установщике выберите **"C++ Windows XP Support for VS 2017 (v141) tools"** в разделе **Individual Components**.
3. После установки скопируйте папку с toolset (обычно находится в `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.16.27023`) в соответствующую директорию Visual Studio 2022 или настройте пути вручную в настройках проекта.
**Важно**: Согласно обсуждениям на Stack Overflow и Reddit, более поздние версии VS 2019 (после 16.7) содержат ошибки в v141_xp, из-за которых скомпилированные приложения могут не работать на Windows XP из-за использования API, несовместимых с XP (например, `InitializeCriticalSectionEx`). Поэтому используйте версию 16.4 или ранее.[](https://stackoverflow.com/questions/4951...r-vc-2017)[](https://www.reddit.com/r/VisualStudio/co...41_xp_or/)
---
### 3. **Ручная настройка v141_xp в Visual Studio 2022**
Если вы уже установили v141_xp через VS 2017 или VS 2019, но хотите использовать его в VS 2022, выполните следующие шаги:
1. **Проверка наличия v141 toolset**:
- Убедитесь, что v141 (не только v141_xp) установлен, так как v141_xp зависит от базового v141 toolset. Без него статически связанные бинарные файлы могут использовать API, несовместимые с XP.[](https://stackoverflow.com/questions/4951...r-vc-2017)
- Проверьте папку `C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\` или аналогичную для VS 2019.
2. **Добавление toolset в VS 2022**:
- Скопируйте папку v141_xp (например, `14.16.27023`) из установки VS 2017/2019 в папку `C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\`.
- В свойствах проекта в VS 2022 выберите `v141_xp` в **Platform Toolset**.
- Если toolset не отображается, добавьте путь вручную:
- В **Configuration Properties > VC++ Directories** укажите пути к Include и Library файлам из VS 2017/2019.
3. **Устранение ошибок**:
- Если возникает ошибка `MSB8020: The build tools for v141_xp cannot be found`, проверьте переменную окружения `VCTargetsPath`. Иногда она может мешать. Попробуйте удалить или исправить её (например, установить в `C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VC\v150\`).[](https://stackoverflow.com/questions/4951...r-vc-2017)
- Для статической компоновки добавьте флаг `/NODEFAULTLIB` и вручную укажите библиотеки из v141_xp, чтобы избежать включения несовместимых API.[](https://www.reddit.com/r/VisualStudio/co...41_xp_or/)
---
### 4. **Альтернативные решения**
Если установка v141_xp невозможна или слишком сложна, рассмотрите следующие варианты:
- **Использование старых версий библиотек**:
- Если вы компилируете статически связанные приложения, скопируйте библиотеки из VS 2019 (версия 16.4) и укажите их в настройках проекта с флагом `/NODEFAULTLIB`. Это может помочь избежать несовместимых API.[](https://www.reddit.com/r/VisualStudio/co...41_xp_or/)
- **Компиляция в более старой IDE**:
- Используйте Visual Studio 2017 или Visual Studio 2019 (16.4) для сборки приложений, совместимых с XP, а VS 2022 — для других задач. Это проще, чем пытаться интегрировать устаревший toolset.
- **Неофициальные методы**:
- Некоторые разработчики сообщают, что можно настроить MSVC 2022 для работы с Windows XP, используя неофициальные настройки и старые библиотеки времени выполнения (CRT). Например, можно настроить сборку для Windows 98/NT 4.0 с помощью твиков, но это требует глубоких знаний и не гарантирует стабильности.[](https://www.reddit.com/r/VisualStudio/co...41_xp_or/)
---
### 5. **Почему это сложно?**
Microsoft официально прекратила поддержку Windows XP, и начиная с Visual Studio 2019 (после версии 16.7), v141_xp стал ненадёжным из-за изменений в runtime (например, использование `InitializeCriticalSectionEx`, который не поддерживается в XP). В Visual Studio 2022 Microsoft полностью отказалась от поддержки XP, и даже если вы установите v141_xp, скомпилированные приложения могут не работать на XP без дополнительных твиков.[](https://stackoverflow.com/questions/4951...r-vc-2017)[](https://www.reddit.com/r/VisualStudio/co...41_xp_or/)
---
### 6. **Рекомендация**
- **Оптимальный путь**: Установите Visual Studio 2017 Community, включите v141_xp через установщик, и используйте его для сборки приложений, совместимых с Windows XP. Затем, если нужно, интегрируйте toolset в VS 2022, скопировав необходимые файлы и настроив пути.
- **Если нужна помощь с установкой**:
1. Перейдите на [visualstudio.microsoft.com/vs/older-downloads/](https://visualstudio.microsoft.com/vs/older-downloads/) и войдите в систему с учётной записью Microsoft.
2. Скачайте Visual Studio 2017 Community и установите компонент v141_xp.
3. Если возникают ошибки, напишите, какие именно, и я помогу их устранить.
Если у вас есть дополнительные вопросы или проблемы с конкретным шагом, дайте знать, и я разберусь подробнее!
XEPOMAHT,
В моде в версиях 3.63 и 3.64 отсутствуют "твои" версии "game bug fixes extended.dll" и "wog native dialogs.era", без них старта большинства рандомок и сценариев нет, происходит краш, это на чистой Эра 3.9.21 v1. В версии 3.62 они присутствуют, поэтому там все работает.
(26.06.2025 09:19)Panda Wrote: [ -> ]В моде в версиях 3.63 и 3.64 отсутствуют "твои" версии "game bug fixes extended.dll" и "wog native dialogs.era", без них старта большинства рандомок и сценариев нет, происходит краш, это на чистой Эра 3.9.21 v1. В версии 3.62 они присутствуют, поэтому там все работает.
Эти плагины несовместимы с ЭРА 3.9.22 и выше, поэтому они были убраны из ERA+ для того, чтобы у игроков была возможность запускать ERA+ на последней версии ЭРЫ. Игрокам придётся самим искать актуальные версии этих плагинов под конкретные версии ЭРЫ, т.к. Берсеркер не хочет восстанавливать совместимость.
К примеру, в ERA+ "game bug fixes extended.dll" находился именно тот, который был полностью совместим с Тифоном - в нём Игрик добавлял проверки на Тифон и выключал несовместимые и конфликтные багфиксы. В последней ЭРЕ "game bug fixes extended.dll" сильно разросся (там солянище от разных авторов) и похоже написан он уже без учёта Тифона (т.к. Игрик уже отошёл от дел) - я протестировать не могу, т.к. совместимость этого плагина с Windows 2003 никто сделать не может/не хочет.
У меня эти 2 плагина перемещены обратно в папку WoG. Возможно, что в вместе с ERA+ придётся выкладывать отдельный h3era.exe, который будет запускать нужные версии era.dll, vfs.dll, game bug fixes extended.dll, wog native dialogs.era и остальных привызанных к era.dll плагинов (например Берсеркер наглухо привязал к era.dll плагин buttons.era, функционал которого Тифон в памяти игры выкорчёвывает и выпиливает под корень из-за его тотальной несовместимости, а просто выключить его без костылей - нельзя

) конкретно под ERA+, т.к. поддерка глобальных модов в ванильной версии ЭРЫ от Берсеркера похоже скоро будет поделена на ноль окончательно для вытеснения всех выживших глобальников и просто всякого старья и мусора. Мне эта политика "загрязнения" базовой версии ЭРЫ тоже не нравится, но поделать уже ничего нельзя - я и так залолбал Берсеркера своим нытьём. Может быть, пришло время отделяться и запиливать совственную era.dll с блэкджеком и шлюхами, но... думаю, что это уже никому не нужно, даже мне - энтузиазм в этом направлении совсем не лежит...
XEPOMAHT, обновил плагины (ссылки те же)
wog native dialogs.era
game bug fixes extended.dll
Вот ссылки на файлы .dbgmap:
wog native dialogs.dbgmap
game bug fixes extended.dbgmap
Что было сделано:
- потратил пару ночей на безуспешные попытки удалить остатки старых студий, лишь бы не тратить место для установки MSVS 2017 Community
- расширил сегодня диск, чтобы поставить с нуля 2017-ю и 2022
- случайно нашёл установщик Build Tools от 2017
- установил
только Build Tools от Visual Studio 2017 версии 15.9.55
- сменил Toolset на
Visual Studio 2017 - Windows XP (v141_xp)
- сменил версию пакета SDK на
7.0
- пересобрал плагины с тем же кодом, что скидывал ранее
XEPOMAHT,
Без этих "твоих" плагинов нет старта большинства рандомок и сценариев, даже на Эра 3.9.21 v1.
С другими вариациями нет старта игры.
Значит требования к данной версии Эры 3.9.21 v1 бессмысленно, т.к. те, кто скачает и установит её, не смогут играть в Эра Плюс, поскольку с теми плагинами, что там лежат в дистрибутиве, игра постоянно крашится, а с теми, что были в моде Эра Плюс, их больше там нет. Соответственно те, кто пройдет все этапы и выполнит все инструкции, установив голую Эру 3.9.21 v1, и подключит туда Эра Плюс 3.64, поиграть в неё не сможет.
Эти плагины получается старее Эры 3.9.21 v1? Тогда из какой они версии Эра?
Panda, новая ERA требует данные плагины исправленными. Так что только их новая версия будет работать на ней.
P.S.: что за краши на новой чистой сборке? Отпиши в телегу, дискорд или в тему сборки, пожалуйста