__declspe c (dllexport) при импорте. Кажется, не имеет значения? - PullRequest
0 голосов
/ 02 мая 2020

Позвольте мне начать с того, что я знаю, какова цель ключевого слова __declspec(dllexport). Но, экспериментируя ради этого, при импорте функций с этим ключевым словом по сравнению с тем, когда ключевое слово не используется, я не вижу никакой разницы в создаваемой / импортируемой таблице импорта / экспорта.

Для иллюстрации У меня есть проект DLL, который включает в себя заголовочный файл со следующим объявлением:

__declspec(dllexport) int somefunc(int, int)

А затем еще один проект, который создает функции импорта EXE из DLL:

#include "path_to_header_file_of_dll"
int main() {
    somefunc();
}

Когда я собираю этот EXE-файл, кажется, что он компилируется и собирается нормально, хотя я объявил функцию как экспорт этого символа, когда он явно не экспортирует его, а только импортирует. Почему компилятор не жалуется? Также это не заставляет сгенерированный EXE иметь таблицу экспорта. Но вместо этого строит таблицу импорта. Компилятор, похоже, понял, что правильно делать, и делает это.

Если это работает, то зачем возиться с кодом, подобным приведенному ниже:

#ifdef BLEH
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif

DLLEXPORT int somefunc(int, int);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...