Hi @Michael-R-LegakoL-3com-com,

I think a better approach, is to use a macro to apply the dllimport/export, and then enable that macro in the library only.

For example, if you look at qmake's simple_dll test example, the simple.h header contains:

#ifdef SIMPLEDLL_MAKEDLL # define SIMPLEDLL_EXPORT Q_DECL_EXPORT #else # define SIMPLEDLL_EXPORT Q_DECL_IMPORT #endif class SIMPLEDLL_EXPORT Simple { ... }

Then the simple_dll.pro file contains:

DEFINES += SIMPLEDLL_MAKEDLL

So, this way, when the library is being built (via simple_dll.pro), then class is dllexport'ed. But when other code uses that same header (in doesn't define SIMPLEDLL_MAKEDLL) then that same class is dllimport'ed instead.

Typically, you end up doing this sort of thing to many classes in a single library, so rather than having the #ifdef ... #define ... etc in each header file, it often ends up being written once in a "global" project header of some kind. For example, Q_CORE_EXPORT gets defined in qglobal.h, then used throughout all of the exported core Qt class headers.

Also see:

When creating a library with Qt/Windows and using it in an application, then there is a link error regarding symbols which are in the library

Cheers.