X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0ff20b9f009c108493550d259b0c78dc44dcfdff..74f35eea76a446101e129cd7d2c219c3266dcbbf:/include/wx/dlimpexp.h diff --git a/include/wx/dlimpexp.h b/include/wx/dlimpexp.h index e2baeb9f04..f6effd3444 100644 --- a/include/wx/dlimpexp.h +++ b/include/wx/dlimpexp.h @@ -16,7 +16,10 @@ #ifndef _WX_DLIMPEXP_H_ #define _WX_DLIMPEXP_H_ -#if defined(__WINDOWS__) +#if defined(HAVE_VISIBILITY) +# define WXEXPORT __attribute__ ((visibility("default"))) +# define WXIMPORT __attribute__ ((visibility("default"))) +#elif defined(__WINDOWS__) /* __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well as VC++ and gcc @@ -51,9 +54,6 @@ #elif defined(__CYGWIN__) # define WXEXPORT __declspec(dllexport) # define WXIMPORT __declspec(dllimport) -#elif defined(HAVE_VISIBILITY) -# define WXEXPORT __attribute__ ((visibility("default"))) -# define WXIMPORT #endif /* for other platforms/compilers we don't anything */ @@ -281,5 +281,34 @@ #define WXDLLEXPORT WXDLLIMPEXP_CORE #define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE +/* + MSVC up to 6.0 needs to be explicitly told to export template instantiations + used by the DLL clients, use this macro to do it like this: + + template class Foo { ... }; + WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( Foo ) + + (notice that currently we only need this for the wxBase library) + */ +#if defined(__VISUALC__) && (__VISUALC__ <= 1200) + #ifdef WXMAKINGDLL_BASE + #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \ + template class WXDLLIMPEXP_BASE decl; + #else + /* + We need to disable this warning when using this macro, as + recommended by Microsoft itself: + + http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b168958 + */ + #pragma warning(disable:4231) + + #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \ + extern template class WXDLLIMPEXP_BASE decl; + #endif +#else /* not VC <= 6 */ + #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) +#endif /* VC6/others */ + #endif /* _WX_DLIMPEXP_H_ */