...
Но вообще __declspec(dllexport) это грязный хак от микрософта, по хорошему компилятор должен сам понимать, что экспортировать, а что нет.
А это очевидно? Допустим, длл имеет файл 'unit1.c', в котором есть пара функций
int foo_public() { return 0; }
static int foo_private() { return 0; }
Первая будет доступна другим модулям этой длл, вторая - нет, и с ней все очевидно - это приватная функция в либе. Далее уже перед линкером встает вопрос - делать ли первую функцию экспортируемой из самой длл или нет? Насколько я помню, gcc по-умолчанию отвечает да.
__declspec(dllimport) также служит для оптимизации - генерирует более эффективный косвенный вызов в одну инструкцию
call DWORD PTR __imp_foo_public ; __imp_foo_public - слот в секции импорта приложения