Quote:1) В вопросах скорости — экономия на спичках, даже не серьёзно.
Минимум один раз я впилился в ситуацию, когда мне даже накладные расходы на патчеровский переходник для хука оказались велики. Так что я бы не стал говорить за спички.
Quote:У меня так в одном из модулей:
Тут пять объявлений. В оч базовой библиотеке типа старохотовского/третьехдшного Homm3.h их семьдесят, и это потому что я очень ленивый и не добавлял туда еще несколько десятков локально разбросанного по исходникам.
Все переписывать, все в глобальные переменные ><
Еще и возможность сравнительно быстро адаптировать несложные плагины под сод уйдет.
Quote:А теперь представьте, что вы написали 10 плагинов и ушли на пенсию. Чтобы сделать с ними совместимость, мне достаточно в пару мест добавить GetRealAddr в ранее неучтённых указателях. Как и в любом актуальном коде. Но если ваши плагины сами никогда не уведомляют о расширенных структурах и не пользуются GetRealAddr, то беда.
Седьмой плагин сломался, когда Эра 4.0.74 поставила свой хук в то же место, третий не актуален, потому что его функционал все равно ломает пару других популярных плагинов, восьмой отвалился при очередном обновлении HD-мода, еще четыре сдохли, когда Эра 5.70.05 в очередной раз вышла под девизом "Сбросим Пушкина с парохода современности", грохнув какое-то старое легаси.
Общая хрупкость системы? Она у нас давно в отрицательных величинах.
Более того, тут сама пресуппозиция неверна, прям обязательное использование GetRealAddr имеет смысл только если у нас _уже_ нету десятка плагинов от ушедших на покой авторов и кучи разбросанных по сети устаревших примеров, по которым учатся новички.
А если мы вынуждены о них думать..только цепочки косвенных адресаций, только хардкор.
Quote:Вариант HD-мода тоже неплох, но требует искать всегда такие неизменные участки кода (которые часто не выравнены) и надеяться, что там никто команду не пропатчил с полной заменой логики.
а если у нас команда пропатчена с полной заменой логики, то, скорее всего, нам и GetRealAddr не поможет.
Т.е. не искусственный пример для этого - тифон или что-то тифоноподобное (реализующее и альтерветки/апгрейды), что для работы с таблицей монстров заменяет почти все обращения к ней. Казалось бы, указателей нету, но ведь у нас теперь нету и таблицы, на которую можно было бы кидать редирект!
Причем в подавляющем большинстве ненадуманных примеров так и будет по определению - если мы патчим обработчик таблицы, то, скорее всего, нас не устраивает таблица целиком.
Кстати, а что мы делаем с тем фактом, что GetRealAddress не даст нам информации ни о дополнительной части таблицы, ни о её пределах? Как ни крути, нам все равно нужно изворачиваться, это ни разу не серебряная пуля.
Для UN:C это отличный механизм, я не спорю, и плагинам он хотя бы не создает проблем (в отличие от), но я не считаю, что он реально необходим и обязателен.
Quote:Хотя в целом решение лежит на поверхности, его даже в patcher нужно было вводить: Redirect + GetAddress пара позволила бы всем договориться и не ссылаться на код.
Эм, нет, это не сработает. Потому что читаем данные мы не через патчер, а через *(_type_*).