Во-первых, обратите внимание, что это особенность Microsoft.Для других систем будут действовать другие правила.
Написание того, что вы делали, не работает или, по крайней мере, болезненно.Вам нужно использовать __declspec(dllexport)
в DLL, которая определяет функции, но __declspec(dllimport)
при компиляции кода, который вызывает функции из другой DLL.Обычный способ справиться с этим - использовать какое-то конкретное имя макроса, указывающее DLL, и сделать что-то вроде:
#ifdef __WIN32
#ifdef MYMODULE_DLL
#define MYMODULE_EXPORT __declspec(dllexport)
#else
#define MYMODULE_EXPORT __declspec(dllimport)
#endif
#else
#define MYMODULE_EXPORT
#endif
Поместите это в заголовок, который включен во все заголовки вашей DLL, и определитеMYMODULE_DLL
в командной строке проекта.
Кроме того, можно экспортировать целый класс:
class MYMODULE_EXPORT DllTest
{
// ...
};
Это позволяет экспортировать или импортировать все функции и статические данные.Члены класса.