Поскольку в основном программа работала с вещественными числами, регистров общего назначения хватало с запасом. Чтобы подсократить размер экзешника, в самом начале программы я обнулял регистр EBX и использовал его везде, где это возможно, вместо константы 0. Всё тот же STDCALL этого не запрещает: вызываемые функции значение этого регистра сохраняют, так что оказалось действительно удобно. Есть только одна проблема: внутри себя функции WinAPI этот регистр активно используют, а соглашение вызова не обязывает их восстанавливать его значение перед вызовом callback-функций.
Моя ошибка оказалась в том, что в оконной процедуре (а с точки зрения User32.dll она как раз и есть callback) я забыл прописать явное обнуление EBX. На тех компьютерах, где программа работала корректно, мне просто везло: значение регистра оставалось нулевым. На остальных же системах там оказывалось ненулевое значение, которое успешно использовалось вместо всех нулей во многих процедурах программы. Одна строчка кода, два байта в экзешнике — полгода спустя они обрели своё место в коде, но было уже поздно.
Обнуляйте переменные и регистры — и будет вам счастье!
#9274: Заразите всё обратно
13:00 28.05.2012, IT happens
Звонок от одного из пользователей:
— Алло, как закрыть антивирус, не сохраняя?
Долгое молчание на нашей стороне.
#9275: Глюков не видать
13:00 28.05.2012, IT happens
Лет этак девять назад я работал в фирме районного масштаба по продаже и ремонту компьютеров. Приходит мужик с сыном лет десяти и приносит комп. Говорит, что внезапно винды перестали грузиться.
Ну, дело обычное — берём на диагностику, прогоняем тесты и обнаруживаем, что хард покрыт бэдами чуть меньше, чем полностью. Ставим новый хард. Заказчик с сыном приходит забирать. Отдаём комп и убитый HDD.
— А зачем мне убитый винчестер? — спрашивает мужик.
— Ну, нам он без надобности. Отдайте сыну, пускай разберёт, посмотрит, что там внутри.
— Да я уже его разбирал… — говорит сынуля.
Пауза. Звук громкой затрещины.
#9276: По бороздкам коврика для мыши
13:00 28.05.2012, IT happens
Сегодня убедился, что бухгалтера — роботы.
У бухши сгорел монитор в тот момент, когда она считала зарплату всей фирме. При отрубленном мониторе она сумела сохранить все данные, закрыть 1С и корректно выключить комп. Только после этого героическая женщина позвала админа.
#9277: Win32.Vse.Dlya.Tebya
15:00 28.05.2012, IT happens
Рассказали мне тут о совершенно неубиваемом вирусе. Когда компьютер его ловит, пользователь не в состоянии сделать вообще ничего. Друзья-программисты в панике убегают. Суровые компьютерщики советуют больше никогда не включать компьютер и купить новый.
Дело в том, что вирус при запуске компьютера показывает клип Стаса Михайлова.
Технически проще некуда, но во время этого шоу у любого человека происходит кататонический ступор. В следующий раз компьютер включать реально страшно.
#9278: Незабываемые мегапиксели
15:00 28.05.2012, IT happens
Служебная записка от руководителя отдела рекламы руководителю отдела IT:
В связи с производственной необходимостью прошу модернизировать компьютеры, увеличить размеры памяти сотрудников отдела маркетинга и рекламы для работы с графическими файлами.
C уважением, N.
#9279: Не плакала и не кололась
16:45 28.05.2012, IT happens
Было это году в 2004-м. Мой товарищ работал в небольшой конторке, торгующей дорогими брендовыми компьютерами.
И вот как-то приходит к ним тётенька — солидная и явно богатая. Собирают ей навороченный системник, добавляют немаленький ЭЛТ-монитор, и тут эта особа спрашивает:
— А экран защитный можно?
— Какой экран?
— Ну, на монитор.
— А… Так их не делают давным-давно. Нынешние мониторы излучают совсем мало, да и защитный слой изначально встроен во все модели.
— Вы меня не обманете! Я точно знаю, что надо защищать себя от радиации!
В общем поняли инженеры, что спорить бесполезно, и самый смекалистый рванул в ближайший цветочный магазин. Там за сто рублей купил симпатичный кактус в хайтечного вида горшочке. Уже на месте на него наклеили оригинальные стикеры «Intel Inside», «Powered by Asus» и «Designed for Windows». В таком виде кактус и был предъявлен тётеньке, которая сразу просияла: