В мире Microsoft __declspec(dllexport)
делает функцию или класс вызываемым из-за пределов DLL.
Когда вы создаете DLL, по умолчанию все функции, определенные в DLL, могут вызываться только из этой же DLL. Вы не можете вызвать эту функцию из исполняемого файла или другой DLL.
Если вы хотите, чтобы ваша функция вызывалась извне DLL, вам нужно экспортировать ее, добавив __declspec(dllexport)
.
Один из способов думать об этом - __declspec(dllexport)
помечает функцию как часть открытого интерфейса DLL.
Хотя вы не спрашивали о __declspec(dllimport)
, это как бы наоборот. При вызове функции из другой библиотеки DLL ваша библиотека должна знать, что она является частью открытого интерфейса другой библиотеки DLL, поэтому она может правильно обрабатывать вызов (вызов функции в другой библиотеке DLL требует более сложного кода, чем вызов функции внутри вас).