Поделиться через


Определение подходящего метода экспорта

Можно экспортировать функции в 2 или файла способов - DEF или ключевое слово __declspec(dllexport).Чтобы помочь решить, лучшим способом для библиотеки DLL, рассмотрите следующие вопросы:

  • Планируется экспортировать дополнительные функции далее?

  • Библиотека DLL используется только для тех приложений, которые можно перестроить, или он используется приложениями, которые невозможно перестроение- для примера, приложениями, созданные сторонними разработчиками?

Преимущества и недостатки использования файла DEF

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

Другим преимуществом использования def-файла, можно использовать атрибут NONAME экспортировать функцию.Это размещение только порядковый номер в таблицу экспортов в библиотеке DLL.Для библиотеки DLL, которые имеют большое количество экспортированных функций, с помощью атрибута NONAME может уменьшить размер файла DLL.Сведения о способах написания выписка определения модуля см. в разделе Правила для операторов определения модуля.Дополнительные сведения о порядковом экспорте см. в разделе Экспорт функций из библиотеки DLL по порядковому номеру, а не по имени.

Недостатки использования def-файла, что при экспортировании функций в файле A.C, C-++, необходимо поместить в def-файл декорированные имена или определить экспортированные функции с помощью модификатор extern "C", чтобы избежать оформления имени, выполняется компилятором Visual C-++ C.

При помещении в def-файл декорированные имена можно получить их с помощью DUMPBIN или с помощью параметра компоновщика /MAP.Декорированные имена, которые создаются компилятором компилятором с; поэтому, если разместить декорированные имена, которые создаются компилятором в данный файл, приложения, относящихся к DLL должны быть созданы с помощью той же версии компилятора, что декорированные имена совпадению вызывающего приложения экспортированные имена в def-файле библиотеки DLL.

Преимущества и недостатки использования __declspec(dllexport)

Использование __declspec(dllexport) удобно, поскольку можно не беспокоиться о поддержании def-файла и получать внутренние имена экспортированных функций.Однако польза этого способа экспортировать ограничена числом связанных приложений, которые можно легко.При повторном построении библиотеки DLL с новыми, понадобится также перестроить приложения, поскольку декорированные имена экспортированных функций C C-++ может измениться, если используется другая версия компилятора для перестроения его.

900axts6.collapse_all(ru-ru,VS.110).gifВыполняемые задачи

900axts6.collapse_all(ru-ru,VS.110).gifДополнительные сведения

См. также

Основные понятия

Экспорт из библиотеки DLL