Нужно ли перестраивать против dll, если его экспорт не изменился? - PullRequest
1 голос
/ 05 октября 2010

Это, наверное, очень глупый вопрос.Но предположим, что у меня есть DLL (test.dll) с некоторыми экспортами, которая при сборке создает библиотеку импорта (test.lib).У меня есть приложение TestApp, которое использует эту DLL.

Теперь, если я хочу изменить реализацию некоторых функций в DLL и сохранить экспорт без изменений, нужно ли перестраивать приложение, которое использует эту DLL /импорт lib?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 05 октября 2010

Нет.Вам НЕ нужно перестраивать против DLL.

Учтите, что ваше приложение работает на Windows XP, и однажды Windows 7 приходит.Это же приложение продолжает работать без перестройки, даже если системные библиотеки типа user32.dll и kernel32.dll обновлены!

1 голос
/ 05 октября 2010

Если функции являются функциями C, и вы не изменяете определение передаваемых структур, нет необходимости перестраивать приложение.

Если DLL экспортирует классы C ++, то модуль импорта необходимо перестраивать. Несмотря на то, что сигнатуры методов не меняются, экспорт класса C ++ протекает с утечкой: при выделении пространства для класса не существует определенной функции распределителя, которая экспортируемый (по умолчанию) как таковой импортирующий модуль должен угадать, сколько места нужно выделить, перед вызовом конструктора (экспортированного). Он строит это предположение путем анализа определения классов.

Печальным последствием этого является то, что даже если вы будете осторожны, чтобы изменить только детали реализации классов - даже если сигнатуры методов останутся прежними, и DLL будет успешно загружена, приложение выделит неправильное количество байтов при создании новый экземпляр в куче или стеке.

1 голос
/ 05 октября 2010

нет. Одна из целей разделяемой библиотеки (против статической библиотеки) состоит именно в следующем: до тех пор, пока внешнее представление не изменится (экспортированные определения / функции), приложения, использующие его, не нуждаются в перекомпиляции.

...