| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- /*
- * Name: wx/dlimpexp.h
- * Purpose: Macros for declaring DLL-imported/exported functions
- * Author: Vadim Zeitlin
- * Modified by:
- * Created: 16.10.2003 (extracted from wx/defs.h)
- * Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
- * Licence: wxWindows licence
- */
- /*
- This is a C file, not C++ one, do not use C++ comments here!
- */
- #ifndef _WX_DLIMPEXP_H_
- #define _WX_DLIMPEXP_H_
- #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++.
- */
- # if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__WATCOMC__)
- # define WXEXPORT __declspec(dllexport)
- # define WXIMPORT __declspec(dllimport)
- /*
- While gcc also supports __declspec(dllexport), it creates unusably huge
- DLL files since gcc 4.5 (while taking horribly long amounts of time),
- see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43601. Because of this
- we rely on binutils auto export/import support which seems to work
- quite well for 4.5+.
- */
- # elif defined(__GNUC__) && !wxCHECK_GCC_VERSION(4, 5)
- /*
- __declspec could be used here too but let's use the native
- __attribute__ instead for clarity.
- */
- # define WXEXPORT __attribute__((dllexport))
- # define WXIMPORT __attribute__((dllimport))
- # endif
- #elif defined(__WXPM__)
- # if defined (__WATCOMC__)
- # define WXEXPORT __declspec(dllexport)
- /*
- __declspec(dllimport) prepends __imp to imported symbols. We do NOT
- want that!
- */
- # define WXIMPORT
- # elif defined(__EMX__)
- # define WXEXPORT
- # define WXIMPORT
- # elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
- # define WXEXPORT _Export
- # define WXIMPORT _Export
- # endif
- #elif defined(__CYGWIN__)
- # define WXEXPORT __declspec(dllexport)
- # define WXIMPORT __declspec(dllimport)
- #endif
- /* for other platforms/compilers we don't anything */
- #ifndef WXEXPORT
- # define WXEXPORT
- # define WXIMPORT
- #endif
- /*
- We support building wxWidgets as a set of several libraries but we don't
- support arbitrary combinations of libs/DLLs: either we build all of them as
- DLLs (in which case WXMAKINGDLL is defined) or none (it isn't).
- However we have a problem because we need separate WXDLLIMPEXP versions for
- different libraries as, for example, wxString class should be dllexported
- when compiled in wxBase and dllimported otherwise, so we do define separate
- WXMAKING/USINGDLL_XYZ constants for each component XYZ.
- */
- #ifdef WXMAKINGDLL
- # if wxUSE_BASE
- # define WXMAKINGDLL_BASE
- # endif
- # define WXMAKINGDLL_NET
- # define WXMAKINGDLL_CORE
- # define WXMAKINGDLL_ADV
- # define WXMAKINGDLL_QA
- # define WXMAKINGDLL_HTML
- # define WXMAKINGDLL_GL
- # define WXMAKINGDLL_XML
- # define WXMAKINGDLL_XRC
- # define WXMAKINGDLL_AUI
- # define WXMAKINGDLL_PROPGRID
- # define WXMAKINGDLL_RIBBON
- # define WXMAKINGDLL_RICHTEXT
- # define WXMAKINGDLL_MEDIA
- # define WXMAKINGDLL_STC
- # define WXMAKINGDLL_WEBVIEW
- #endif /* WXMAKINGDLL */
- /*
- WXDLLIMPEXP_CORE maps to export declaration when building the DLL, to import
- declaration if using it or to nothing at all if we don't use wxWin as DLL
- */
- #ifdef WXMAKINGDLL_BASE
- # define WXDLLIMPEXP_BASE WXEXPORT
- # define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type
- # if defined(HAVE_VISIBILITY)
- # define WXDLLIMPEXP_INLINE_BASE WXEXPORT
- # else
- # define WXDLLIMPEXP_INLINE_BASE
- # endif
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_BASE WXIMPORT
- # define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type
- # if defined(HAVE_VISIBILITY)
- # define WXDLLIMPEXP_INLINE_BASE WXIMPORT
- # else
- # define WXDLLIMPEXP_INLINE_BASE
- # endif
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_BASE
- # define WXDLLIMPEXP_DATA_BASE(type) type
- # define WXDLLIMPEXP_INLINE_BASE
- #endif
- #ifdef WXMAKINGDLL_NET
- # define WXDLLIMPEXP_NET WXEXPORT
- # define WXDLLIMPEXP_DATA_NET(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_NET WXIMPORT
- # define WXDLLIMPEXP_DATA_NET(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_NET
- # define WXDLLIMPEXP_DATA_NET(type) type
- #endif
- #ifdef WXMAKINGDLL_CORE
- # define WXDLLIMPEXP_CORE WXEXPORT
- # define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type
- # if defined(HAVE_VISIBILITY)
- # define WXDLLIMPEXP_INLINE_CORE WXEXPORT
- # else
- # define WXDLLIMPEXP_INLINE_CORE
- # endif
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_CORE WXIMPORT
- # define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type
- # if defined(HAVE_VISIBILITY)
- # define WXDLLIMPEXP_INLINE_CORE WXIMPORT
- # else
- # define WXDLLIMPEXP_INLINE_CORE
- # endif
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_CORE
- # define WXDLLIMPEXP_DATA_CORE(type) type
- # define WXDLLIMPEXP_INLINE_CORE
- #endif
- #ifdef WXMAKINGDLL_ADV
- # define WXDLLIMPEXP_ADV WXEXPORT
- # define WXDLLIMPEXP_DATA_ADV(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_ADV WXIMPORT
- # define WXDLLIMPEXP_DATA_ADV(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_ADV
- # define WXDLLIMPEXP_DATA_ADV(type) type
- #endif
- #ifdef WXMAKINGDLL_QA
- # define WXDLLIMPEXP_QA WXEXPORT
- # define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_QA WXIMPORT
- # define WXDLLIMPEXP_DATA_QA(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_QA
- # define WXDLLIMPEXP_DATA_QA(type) type
- #endif
- #ifdef WXMAKINGDLL_HTML
- # define WXDLLIMPEXP_HTML WXEXPORT
- # define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_HTML WXIMPORT
- # define WXDLLIMPEXP_DATA_HTML(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_HTML
- # define WXDLLIMPEXP_DATA_HTML(type) type
- #endif
- #ifdef WXMAKINGDLL_GL
- # define WXDLLIMPEXP_GL WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_GL WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_GL
- #endif
- #ifdef WXMAKINGDLL_XML
- # define WXDLLIMPEXP_XML WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_XML WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_XML
- #endif
- #ifdef WXMAKINGDLL_XRC
- # define WXDLLIMPEXP_XRC WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_XRC WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_XRC
- #endif
- #ifdef WXMAKINGDLL_AUI
- # define WXDLLIMPEXP_AUI WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_AUI WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_AUI
- #endif
- #ifdef WXMAKINGDLL_PROPGRID
- # define WXDLLIMPEXP_PROPGRID WXEXPORT
- # define WXDLLIMPEXP_DATA_PROPGRID(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_PROPGRID WXIMPORT
- # define WXDLLIMPEXP_DATA_PROPGRID(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_PROPGRID
- # define WXDLLIMPEXP_DATA_PROPGRID(type) type
- #endif
- #ifdef WXMAKINGDLL_RIBBON
- # define WXDLLIMPEXP_RIBBON WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_RIBBON WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_RIBBON
- #endif
- #ifdef WXMAKINGDLL_RICHTEXT
- # define WXDLLIMPEXP_RICHTEXT WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_RICHTEXT WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_RICHTEXT
- #endif
- #ifdef WXMAKINGDLL_MEDIA
- # define WXDLLIMPEXP_MEDIA WXEXPORT
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_MEDIA WXIMPORT
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_MEDIA
- #endif
- #ifdef WXMAKINGDLL_STC
- # define WXDLLIMPEXP_STC WXEXPORT
- # define WXDLLIMPEXP_DATA_STC(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_STC WXIMPORT
- # define WXDLLIMPEXP_DATA_STC(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_STC
- # define WXDLLIMPEXP_DATA_STC(type) type
- #endif
- #ifdef WXMAKINGDLL_WEBVIEW
- # define WXDLLIMPEXP_WEBVIEW WXEXPORT
- # define WXDLLIMPEXP_DATA_WEBVIEW(type) WXEXPORT type
- #elif defined(WXUSINGDLL)
- # define WXDLLIMPEXP_WEBVIEW WXIMPORT
- # define WXDLLIMPEXP_DATA_WEBVIEW(type) WXIMPORT type
- #else /* not making nor using DLL */
- # define WXDLLIMPEXP_WEBVIEW
- # define WXDLLIMPEXP_DATA_WEBVIEW(type) type
- #endif
- /*
- GCC warns about using __attribute__ (and also __declspec in mingw32 case) on
- forward declarations while MSVC complains about forward declarations without
- __declspec for the classes later declared with it, so we need a separate set
- of macros for forward declarations to hide this difference:
- */
- #if defined(HAVE_VISIBILITY) || (defined(__WINDOWS__) && defined(__GNUC__))
- #define WXDLLIMPEXP_FWD_BASE
- #define WXDLLIMPEXP_FWD_NET
- #define WXDLLIMPEXP_FWD_CORE
- #define WXDLLIMPEXP_FWD_ADV
- #define WXDLLIMPEXP_FWD_QA
- #define WXDLLIMPEXP_FWD_HTML
- #define WXDLLIMPEXP_FWD_GL
- #define WXDLLIMPEXP_FWD_XML
- #define WXDLLIMPEXP_FWD_XRC
- #define WXDLLIMPEXP_FWD_AUI
- #define WXDLLIMPEXP_FWD_PROPGRID
- #define WXDLLIMPEXP_FWD_RIBBON
- #define WXDLLIMPEXP_FWD_RICHTEXT
- #define WXDLLIMPEXP_FWD_MEDIA
- #define WXDLLIMPEXP_FWD_STC
- #define WXDLLIMPEXP_FWD_WEBVIEW
- #else
- #define WXDLLIMPEXP_FWD_BASE WXDLLIMPEXP_BASE
- #define WXDLLIMPEXP_FWD_NET WXDLLIMPEXP_NET
- #define WXDLLIMPEXP_FWD_CORE WXDLLIMPEXP_CORE
- #define WXDLLIMPEXP_FWD_ADV WXDLLIMPEXP_ADV
- #define WXDLLIMPEXP_FWD_QA WXDLLIMPEXP_QA
- #define WXDLLIMPEXP_FWD_HTML WXDLLIMPEXP_HTML
- #define WXDLLIMPEXP_FWD_GL WXDLLIMPEXP_GL
- #define WXDLLIMPEXP_FWD_XML WXDLLIMPEXP_XML
- #define WXDLLIMPEXP_FWD_XRC WXDLLIMPEXP_XRC
- #define WXDLLIMPEXP_FWD_AUI WXDLLIMPEXP_AUI
- #define WXDLLIMPEXP_FWD_PROPGRID WXDLLIMPEXP_PROPGRID
- #define WXDLLIMPEXP_FWD_RIBBON WXDLLIMPEXP_RIBBON
- #define WXDLLIMPEXP_FWD_RICHTEXT WXDLLIMPEXP_RICHTEXT
- #define WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_MEDIA
- #define WXDLLIMPEXP_FWD_STC WXDLLIMPEXP_STC
- #define WXDLLIMPEXP_FWD_WEBVIEW WXDLLIMPEXP_WEBVIEW
- #endif
- /* for backwards compatibility, define suffix-less versions too */
- #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 <typename T> class Foo { ... };
- WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( Foo<int> )
- (notice that currently we only need this for wxBase and wxCore libraries)
- */
- #if defined(__VISUALC__) && (__VISUALC__ <= 1200)
- #ifdef WXMAKINGDLL_BASE
- #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl) \
- template class WXDLLIMPEXP_BASE decl;
- #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl) \
- template class WXDLLIMPEXP_CORE 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;
- #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl) \
- extern template class WXDLLIMPEXP_CORE decl;
- #endif
- #else /* not VC <= 6 */
- #define WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE(decl)
- #define WXDLLIMPEXP_TEMPLATE_INSTANCE_CORE(decl)
- #endif /* VC6/others */
- #endif /* _WX_DLIMPEXP_H_ */
|