Вы можете перегружать сигнатуры функций в DLL. Однако функция names , экспортируемая из DLL, должна быть уникальной - это требование Windows, а не требование Delphi. Итак, объявите ваши функции в Delphi как перегрузки, но убедитесь, что они экспортируются с конкретными, уникальными именами, которые вы определяете. Клиенты, которые импортируют из вашей новой многофункциональной библиотеки DLL, должны импортировать, используя те уникальные имена, которые вы определили.
Поведение по умолчанию в Delphi состоит в том, что экспортируемые функции экспортируются по имени функции, простой и простой. Если вы хотите сделать перегрузки, вам нужно принять более активное участие и определить имена экспорта самостоятельно.
Обратите внимание, что это не приведет к созданию библиотеки DLL, которую можно было бы перетащить в более старое приложение, которое ожидает ваш файл a.dll. Это решение обратно совместимо для исходного кода, но не обратно совместимо для двоичных файлов.
Скорее всего, вы не сможете создать новую DLL-библиотеку, совместимую в двоичном формате со всеми тремя вашими предыдущими версиями DLL, поскольку старые исполняемые двоичные файлы ссылаются на одно и то же имя функции, но ожидают другого поведения (разные списки параметров).
Обратите внимание также, что если ваши три версии dll на самом деле имеют разные имена файлов (a, b, c), то точка несколько спорная - привязка статической функции связывается с именем dll + именем функции. Если вы хотите, чтобы ваша новая DLL работала со старыми exe-файлами, планируете ли вы скопировать новую dll три раза в имена файлов a, b и c? Это кажется странным и контрпродуктивным. Как и со спящими собаками, пусть лежат старые DLL. Оставьте их в покое, если вам абсолютно не нужно исправлять критическую ошибку.