Пропатчил ошибку из предыдущего поста.
В общем, берем ATL из VS2005 или лучше даже из VS2008 и сравниваем файл atlbase.h с тем, что в VS2003. Особенно пристально смотрим в сторону определения структуры _stdcallthunk.
К сожалению, только изменениями в atlbase.h обойтись не удалось, пришлось еще и lib компилить. На самом деле можно было бы и без нее, но тогда на каждое окошко пришлось бы выделять 4 КБ вместо 100 байт, так что оно того стоило.
воскресенье, 1 марта 2009 г.
Про ошибку в ATL (решилось)
суббота, 28 февраля 2009 г.
Про ошибку в ATL и нововведения вообще
Вот прекрасная порнография. Делаю визуальный контрол, компилирую его под VS2003, и использую в программе скомпиленной под VS2003 - все прекрасно и под WinXPSP2 и под WinVista - далее везде. А потом использую в программе скомпиленной под VS2008, и оно прекрасно работает под WinXPSP2 и так же прекрасно работает под WinVista установленной на VirtualPC под WinXPSP2. А потом валиться, когда запускаю туже программу под VistaHB на ноуте. И это круто, долбиться три часа пытаясь понять, от чего бы в CWindowImplBaseT< TBase, TWinTraits >::StartWindowProc вызов pProc() приводит к такому удивительному результату. И так и не понял почему. Поэтому полез в гугл и нашел вот такую интересную тему .
Отлично, а чего, забыли пометить выделенные данные как исполняемые. А вот интересно что программа скомпилированная под VS2003 нормально с этим же контролом работает. Самое смешное, что эти милые люди и правда поправили баг в VS2008, точно, я проверял. Правда длл-ка скомпиленная в VS2008 весит в два раза больше, чем та которая из под VS2003.
Честно сказать, последнее время микрософтовские нововведения скорее утомляют чем наоборот. Все эти манифесты, WinSxS и прочая муть, которая не понятно зачем придумана кроме как задрать мозги программистам.