Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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