//foo.h
#pragma once
#ifdef FOO_EXPORTS
#define FOO_API __declspec(dllexport)
#else
#define FOO_API __declspec(dllimport)
#endif
namespace foo
{
class Baz
{
public:
FOO_API static auto say_hello() -> void;
};
}
Ключевым моментом, не столько именами функций или моим использованием конечного возвращаемого типа, является то, что вы помещаете имя #defined __declspec перед функцией, которую вы хотите экспортировать, так же, как вы делаете тип .
Вы также сделаете то же самое в определении функции:
//foo.cpp
#include "foo.h"
namespace foo
{
FOO_API auto Baz::say_hello() -> void
{
do
{
MessageBox(nullptr, L"Seems to be working okay!", L"OK", MB_OK);
exit(1);
}
while (0);
}
}
Реализация функции не важна, просто вы ставите FOO_API впереди.