metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-05-05 12:58 am

А вот кому свежей шизы от микрософта?

Нашел себе новое фетишистское развлечение - гоняю все свои приложения под Application Verifier. В принципе, уже пару багов у себя и не у себя нашел.

Но на самый трэшак наткнулся только что. GUIшная прога при запуске из фара - работает нормально, а если запускать с десктопа(и вообще из эксплорера) - падает с уведомлением INVALID HANDLE от Application Verifier.

Сеанс отладки показал, что функция GetStdHandle(STR_OUTPUT_HANLDE) в случае запуска проги без консоли из фара - возвращает 0, как и положено, и у меня срабатывает проверка на неправильный хендл.
А вот если запускать прогу из Explorer - возвращается магическое значение 0x00010001, никакой константе не соответствующее, и вызывающее при операции с ним это уведомление от verifier.
Гугл подсказал только, что не у одного меня такие проблемы, решение - чистый костыль, т.е. просто сравнение с этим значением. Пришлось так и сделать, пометив в коде комментарием к константе что значение не просто так, а принесено жабами и червями.

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-05-05 04:36 am (UTC)(link)
По моему проще нужно быть - обернуть код работы с stdout-ом ифдефами, которые убирают его при сборке под GUI.
И бага уйдёт, и время в рантайме тратится не будет. :)

[identity profile] metaclass.livejournal.com 2009-05-05 05:27 am (UTC)(link)
Не, в том месте ifdef не положено. Либа должна одинаково работать как в гуи таки и в консоли.

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-05-05 05:59 am (UTC)(link)
Ежели либа - тады ой.
Хотя можно ещё флаги хост приложения добыть и разобрать. Ну и в рантайме вполне возможно такой флажек уже есть.
Хотя это от компилера зависит.
Для багланда я вроде натыкался.

[identity profile] blacklion.livejournal.com 2009-05-05 09:36 am (UTC)(link)
Хотя можно ещё флаги хост приложения добыть и разобрать
Только GUI-приложение вполне может открыть консоль и по его флажкам ты это не поймёшь.

[identity profile] komarov.livejournal.com 2009-05-05 05:35 am (UTC)(link)
то есть пользователь потом должен будет кагбе разные бинарники запускать из консоли и из проводника?