Плюсы и минусы использования файлов .def

Я не понимаю этот параграф:

Экспорт функций в файл .def дает вам контроль над порядком экспорта. Когда вы добавляете экспортированную функцию в вашу DLL, вы можете присвоить ей более высокое порядковое значение, чем у любой другой экспортируемой функции. Когда вы делаете это, приложениям, которые используют неявное связывание, не нужно повторно связываться с библиотекой импорта, которая содержит новую функцию. Это очень удобно, если вы разрабатываете DLL для использования многими приложениями, потому что вы можете добавить новые функции, а также убедиться, что она продолжает корректно работать с приложениями, которые уже полагаются на нее. Например, библиотеки MFC создаются с использованием файлов .def.

Почему приложение не должно связываться с библиотекой импорта в случае использования файла .def вместо __declspec (dllexport) в случае добавления функции в dll?

сравни https://docs.microsoft.com/en-us/cpp/build/determining-which-exporting-method-to-use

1

Решение

Это связано с некоторыми особенностями реализации разделяемых объектов (или DLL) в MSFT. В мире Microsoft, чтобы импортировать функции в ваш процесс, вам нужен не только сам общий код (.dll), но и специальная библиотека ‘import’ — .lib файл. Этот файл статически связан с вашим приложением (так как это статическая библиотека). Эта библиотека обеспечивает «связь» между именами функций и порядковыми номерами функций.

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

0

Другие решения

Хорошо, если у вас есть файл .def, вы можете использовать его для создания библиотеки импорта.

То есть mydll.lib для MS VC ++ или MyLib-dll.a для GCC

Компиляторы и компоновщики предпочитают свои собственные библиотеки импорта двоичных форматов, обычно несовместимые друг с другом. Это особенно важно, когда ваша DLL написана на C / C ++, но ваша программа написана на чем-то другом, например, Ada / FORTRAN / Object Pascal и т. Д. Или наоборот. Таким образом, файлы .def можно использовать для создания совместимой библиотеки импорта.

Параграф, говорящий о том, как скрыть некоторые функции из библиотеки импорта, с ручным редактированием файла .DEF и указанием компоновщику скрыть некоторые функции.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector