#dll #msvcrt
#dll #msvcrt
Вопрос:
Я надеюсь, что вы сможете помочь мне с этим.
Я хочу создать dll (статически связывающую другие, не сторонние библиотеки), используя версию 4053 CRT (/ MD) вместо последней (5592) в Visual Studion 2005 SP1.
Мне интересно, достаточно ли для этого использования следующего метода. При использовании этого метода во всех зависимых проектах решения, насколько я понимаю, встроенный манифест dll изменен, чтобы указать запрошенную версию CRT (и MFC, ATL). Верно ли это предположение?
Достаточно ли просто убедиться, что во встроенном манифесте dll указана требуемая версия? Не следует ли мне также использовать правильную библиотеку импорта (msvcrt.lib), принадлежащую более старой (4053) CRT dll (msvcr80.dll ) при сборке моей dll (с игнорированием конкретной библиотеки)? Как изменяется эта библиотека импорта (msvcrt.lib) при незначительных изменениях версии, подобных этому?
Заранее спасибо!
Марк Мауссен
Ответ №1:
Номер версии CRT объявлен в vc/include/crtassem.h. Для MFC это vc/atlmfc/include/mfcassem.h. Для ATL это vc/atlmfc/include/atlassem.h. Если на вашем компьютере разработчика установлено обновление для системы безопасности, то эти файлы будут обновлены. Использование #define _CRT_ASSEMBLY_VERSION x.y.z.w (и т.д.) перед #including любой заголовок CRT переопределит этот номер версии. То же самое происходит при удалении обновления для системы безопасности.
В противном случае это неразумно, целевая машина все еще будет использовать .5592 версию DLL, если на ней установлено обновление для системы безопасности. Он развертывает «политику издателя», которая перенаправляет номер версии, гарантируя, что старые программы автоматически будут исправлены. Тестирование версии, которая выполняется на компьютере вашего клиента, конечно, всегда лучше. И отправка установщика с известной проблемой безопасности очень редко ценится клиентами.
Комментарии:
1. Спасибо за ваш быстрый ответ! Итак, если бы я хотел это сделать, несмотря на то, что это неразумно, мне также не нужно создавать с использованием библиотеки импорта (msvcrt.lib), принадлежащей версии .4053, рядом с определением _CRT_ASSEMBLY_VERSION? Сборка на моем компьютере разработчика с библиотекой, принадлежащей .5592, будет работать? Нет изменений интерфейса / определения во время незначительного обновления / исправления безопасности? Еще раз спасибо!
2. Библиотека импорта не изменилась, использование .5592 msvcrt.lib в порядке.
3. Приятно знать! Меняется ли библиотека импорта когда-либо (без изменения версии VS)? Возможно, со значительным увеличением версии CRT (происходят ли они вообще)? Если библиотека импорта изменится, как с этим справится «политика издателя»? Перенаправление на последнюю версию dll при сборке с другой (в данном сценарии) библиотекой импорта? Спасибо, что уделили мне время, Ханс!
4. Нет, да, это не так. Пожалуйста, закройте свой вопрос, отметив, что на него дан ответ.