В чем разница между dllexport и dllimport?

Я просто ищу простое и лаконичное объяснение разницы между этими двумя. MSDN здесь не вдавается в подробности.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
60
0
31 700
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий
  • __declspec(dllexport) сообщает компоновщику, что вы хотите, чтобы этот объект был доступен для импорта другими DLL. Он используется при создании DLL, на которую могут ссылаться другие.

  • __declspec(dllimport) импортирует реализацию из библиотеки DLL, чтобы ваше приложение могло ее использовать.

Я только начинающий разработчик C / C++, так что, возможно, у кого-то есть лучшее объяснение, чем у меня.

Два разных варианта использования:

1) Вы определяете реализацию класса в dll. Вы хотите, чтобы другая программа использовала этот класс. Здесь вы используете dllexport, поскольку вы создаете класс, который вы хотите, чтобы dll открывала.

2) Вы используете функцию, предоставляемую dll. Вы включаете заголовок, поставляемый с dll. Здесь заголовок использует dllimport для ввода реализации, которая будет использоваться текущей программой.

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

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

Dllimport наоборот: он отмечает функцию как импортируемую из DLL. В этом случае вы только объявляете подпись функции и связываете свой код с библиотекой.

__declspec( dllexport ) - класс или функция, помеченные таким образом, будут экспортированы из библиотеки DLL, в которую они встроены. Если вы создаете DLL и вам нужен API, вам необходимо использовать этот или отдельный файл .DEF, который определяет экспорт ( MSDN). Это удобно, потому что определение хранится в одном месте, но файл .DEF предоставляет больше возможностей.

__declspec( dllimport ) - помеченный таким образом класс или функция будет импортирован из библиотеки DLL. На самом деле это не обязательно - вам нужна библиотека импорта так или иначе, чтобы компоновщик был доволен. Но при правильной маркировке dllimport компилятор и компоновщик имеют достаточно информации для оптимизации вызова; без него вы получите обычную статическую ссылку на функцию-заглушку в библиотеке импорта, которая добавляет ненужную косвенность. ONT1ONT2

Очень хорошая информация о последствиях неиспользования dllimport.

alecov 18.01.2013 05:26

Другие вопросы по теме