Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top