Обновление DLL проекта C ++ в Visual Studio - PullRequest
2 голосов
/ 15 октября 2011

У меня есть проект, который использует созданную мной DLL.Все работает чудесно, но теперь я расширяю библиотеку в DLL для оптимизации некоторых старых функций.

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

Основная причина, по которой я спросил, состоит в том, что на все эти проекты есть ссылки.lib-файл и, честно говоря, я не уверен, что именно находится в .lib-файле проекта DLL.

Любой совет будет принят с благодарностью.

Спасибо

Ответы [ 3 ]

1 голос
/ 15 октября 2011

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

Однако, если вам нужно изменить сигнатуры функций, вы можете сделать одну из (как минимум) двух вещей:

  1. Измените код, который использует вашу библиотеку, чтобы использовать новые сигнатуры функций.
  2. Если # 1 не вариант, подумайте о том, чтобы оставить старую функцию и отказаться от нее. Приложения, использующие вашу последнюю версию, должны избегать использования устаревших методов.

Подробнее о .lib / .dll вы можете прочитать здесь: http://www.screenio.com/tips/dll.htm

1 голос
/ 15 октября 2011

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

Возможно, вам придетсяпозаботьтесь о том, чтобы и dll, и ваш исполняемый файл использовали одну и ту же версию библиотеки времени выполнения Microsoft C ++.Загруженная версия может быть переопределена файлами манифеста.

0 голосов
/ 15 октября 2011

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

Если ваше единственное изменение - это исправление ошибки(или улучшением или чем-то еще) для реального кода внутри функции, вы можете избежать развертывания только обновленной DLL.Для других изменений вы должны развернуть lib и DLL.Если вы изменили сигнатуру функции, вам придется развернуть новый .h, изменить вызывающий код для вызова с измененными параметрами, а затем перекомпилировать вызывающий код.Если вы только что добавили что-то, вы можете избежать повторного создания кода вызова.

...