You can use __declspec(dllexport) on a
function, a class, or on individual members of a class.
When an inline function is marked __declspec(dllexport),
the function definition might be inlined, but an out-of-line instance
of the function is always generated and exported in the same way
as for a non-inline function.
When a class is marked __declspec(dllexport),
for example, class __declspec(dllexport) S { ... }; its
static data members and member functions are all exported. When
individual static data members and member functions are marked with __declspec(dllexport),
only those members are exported. vtables, construction vtable tables and
RTTI are also exported.
Note
The following declaration is correct:
class __declspec(dllexport) S { ... };
The following declaration is incorrect:
__declspec(dllexport) class S { ... };
In conjunction with --export_all_vtbl,
you can use __declspec(notshared) to exempt a
class or structure from having its vtable, construction vtable table
and RTTI exported. --export_all_vtbl and __declspec(dllexport) are
typically not used together.