Рассмотрим следующие модельные ситуации:
Интерфейс DLL не изменяется, но реализация делает. Обязательно ли связывать исполняемый файл с новой библиотекой импорта? И приложение, и DLL компилируются и связываются в одной IDE с использованием одного и того же компилятора и компоновщика.
Интерфейс DLL не изменяется, но реализация делает. Новые версии приложения и DLL скомпилированы и связаны в IDE версии 2.0 (символическое значение, замените, например, C ++ Builder XE2). Можно ли связать двоичный файл приложения со старой версией библиотеки импорта, скомпилированной в версии IDE 1.0 (например, C ++ Builder 6)? Будет ли программа работать нормально без каких-либо ошибок во время выполнения (например, при нарушениях прав доступа)?
Оставаясь с тем же производителем и версией компилятора, даже искаженные имена будут одинаковыми, так что вы должны быть в порядке с # 1.
# 2 может, что означает, что, скорее всего, это так, введет совместимость искажения имен, которая может вас укусить. Если вы экспортируете все в стиле «C» (простые имена) и / или жестко сопоставлены через файл .def с не искаженными идентификаторами (или вы загружаете по порядковому номеру, что, похоже, больше никто не делает в наши дни), # 2 все еще возможно.
Других решений пока нет …