Вы экспортируете функцию-член класса void MyFuncLibInterface::myFunc(std::string param);
, но пытаетесь импортировать бесплатную функцию void myFunc(std::string param);
Убедитесь, что вы #define MyFuncLib_EXPORTS
в проекте DLL.Убедитесь, что вы #include "MyFuncLibInterface.h"
в консольном приложении без определения MyFuncLib_EXPORTS
.
Проект DLL увидит:
class __declspec(dllexport) MyFuncLibInterface {
...
}:
А консольный проект увидит:
class __declspec(dllimport) MyFuncLibInterface {
...
}:
Это позволяет вашему консольному проекту использовать класс из библиотеки DLL.
РЕДАКТИРОВАТЬ: В ответ на комментарий
#ifndef FooH
#define FooH
#ifdef BUILDING_THE_DLL
#define EXPORTED __declspec(dllexport)
#else
#define EXPORTED __declspec(dllimport)
#endif
class EXPORTED Foo {
public:
void bar();
};
#endif
В проекте, который фактически реализует Foo::bar()
BUILDING_THE_DLL
, должны быть определены.В проекте, который пытается использовать Foo
, BUILDING_THE_DLL
должно быть определено , а не . Оба проекта должны #include "Foo.h"
, но только проект DLL должен содержать "Foo.cpp"
Когда вы затем строите DLL, класс Foo и все его члены помечаются как «экспортированные из этого».DLL».При сборке любого другого проекта класс Foo и все его члены помечаются как «импортированные из DLL»