2003-10-16 06:25:56 -04:00
|
|
|
/*
|
|
|
|
* 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)
|
|
|
|
* RCS-ID: $Id$
|
2004-05-23 10:56:36 -04:00
|
|
|
* Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
|
2004-05-23 16:53:33 -04:00
|
|
|
* Licence: wxWindows licence
|
2003-10-16 06:25:56 -04:00
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
This is a C file, not C++ one, do not use C++ comments here!
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _WX_DLIMPEXP_H_
|
|
|
|
#define _WX_DLIMPEXP_H_
|
|
|
|
|
2007-08-13 14:36:14 -04:00
|
|
|
#if defined(HAVE_VISIBILITY)
|
|
|
|
# define WXEXPORT __attribute__ ((visibility("default")))
|
|
|
|
# define WXIMPORT __attribute__ ((visibility("default")))
|
|
|
|
#elif defined(__WINDOWS__)
|
2003-10-16 06:25:56 -04:00
|
|
|
/*
|
|
|
|
__declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well
|
|
|
|
as VC++ and gcc
|
|
|
|
*/
|
|
|
|
# if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__)
|
|
|
|
# define WXEXPORT __declspec(dllexport)
|
|
|
|
# define WXIMPORT __declspec(dllimport)
|
|
|
|
# else /* compiler doesn't support __declspec() */
|
|
|
|
# define WXEXPORT
|
|
|
|
# define WXIMPORT
|
|
|
|
# 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
|
2004-03-10 11:38:00 -05:00
|
|
|
# elif defined(__EMX__)
|
|
|
|
# define WXEXPORT
|
|
|
|
# define WXIMPORT
|
2003-10-16 06:25:56 -04:00
|
|
|
# elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
|
|
|
|
# define WXEXPORT _Export
|
|
|
|
# define WXIMPORT _Export
|
|
|
|
# endif
|
|
|
|
#elif defined(__WXMAC__) || defined(__WXCOCOA__)
|
|
|
|
# ifdef __MWERKS__
|
|
|
|
# define WXEXPORT __declspec(export)
|
|
|
|
# define WXIMPORT __declspec(import)
|
|
|
|
# endif
|
2005-06-22 16:58:47 -04:00
|
|
|
#elif defined(__CYGWIN__)
|
|
|
|
# define WXEXPORT __declspec(dllexport)
|
|
|
|
# define WXIMPORT __declspec(dllimport)
|
2003-10-16 06:25:56 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* for other platforms/compilers we don't anything */
|
|
|
|
#ifndef WXEXPORT
|
|
|
|
# define WXEXPORT
|
|
|
|
# define WXIMPORT
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
2004-05-23 10:56:36 -04:00
|
|
|
We support building wxWidgets as a set of several libraries but we don't
|
2003-10-16 06:25:56 -04:00
|
|
|
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 WXDLLEXPORT 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
|
2006-06-25 20:03:33 -04:00
|
|
|
# define WXMAKINGDLL_QA
|
2003-10-16 06:25:56 -04:00
|
|
|
# define WXMAKINGDLL_HTML
|
2005-01-31 17:36:05 -05:00
|
|
|
# define WXMAKINGDLL_GL
|
2003-10-16 06:25:56 -04:00
|
|
|
# define WXMAKINGDLL_XML
|
2004-10-07 18:58:09 -04:00
|
|
|
# define WXMAKINGDLL_XRC
|
2006-06-06 09:34:54 -04:00
|
|
|
# define WXMAKINGDLL_AUI
|
2006-06-29 03:16:39 -04:00
|
|
|
# define WXMAKINGDLL_RICHTEXT
|
2004-11-23 19:07:45 -05:00
|
|
|
# define WXMAKINGDLL_MEDIA
|
2007-04-21 11:13:37 -04:00
|
|
|
# define WXMAKINGDLL_STC
|
2003-10-16 06:25:56 -04:00
|
|
|
#endif /* WXMAKINGDLL */
|
|
|
|
|
|
|
|
/*
|
|
|
|
WXDLLEXPORT 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
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
# define WXDLLIMPEXP_BASE WXIMPORT
|
|
|
|
# define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
# define WXDLLIMPEXP_BASE
|
|
|
|
# define WXDLLIMPEXP_DATA_BASE(type) type
|
|
|
|
#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
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
# define WXDLLIMPEXP_CORE WXIMPORT
|
|
|
|
# define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
# define WXDLLIMPEXP_CORE
|
|
|
|
# define WXDLLIMPEXP_DATA_CORE(type) type
|
|
|
|
#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
|
|
|
|
|
2005-03-20 19:11:06 -05:00
|
|
|
#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
|
|
|
|
|
2003-10-16 06:25:56 -04:00
|
|
|
#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
|
|
|
|
|
2004-10-07 18:58:09 -04:00
|
|
|
#ifdef WXMAKINGDLL_XRC
|
|
|
|
# define WXDLLIMPEXP_XRC WXEXPORT
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
# define WXDLLIMPEXP_XRC WXIMPORT
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
# define WXDLLIMPEXP_XRC
|
|
|
|
#endif
|
|
|
|
|
2006-06-06 09:34:54 -04:00
|
|
|
#ifdef WXMAKINGDLL_AUI
|
|
|
|
# define WXDLLIMPEXP_AUI WXEXPORT
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
# define WXDLLIMPEXP_AUI WXIMPORT
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
# define WXDLLIMPEXP_AUI
|
|
|
|
#endif
|
|
|
|
|
2006-06-29 03:16:39 -04:00
|
|
|
#ifdef WXMAKINGDLL_RICHTEXT
|
|
|
|
# define WXDLLIMPEXP_RICHTEXT WXEXPORT
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
# define WXDLLIMPEXP_RICHTEXT WXIMPORT
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
# define WXDLLIMPEXP_RICHTEXT
|
|
|
|
#endif
|
|
|
|
|
2004-11-23 07:46:51 -05:00
|
|
|
#ifdef WXMAKINGDLL_MEDIA
|
|
|
|
# define WXDLLIMPEXP_MEDIA WXEXPORT
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
# define WXDLLIMPEXP_MEDIA WXIMPORT
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
# define WXDLLIMPEXP_MEDIA
|
|
|
|
#endif
|
|
|
|
|
2007-04-21 11:13:37 -04:00
|
|
|
#ifdef WXMAKINGDLL_STC
|
|
|
|
#define WXDLLIMPEXP_STC WXEXPORT
|
|
|
|
#elif defined(WXUSINGDLL)
|
|
|
|
#define WXDLLIMPEXP_STC WXIMPORT
|
|
|
|
#else /* not making nor using DLL */
|
|
|
|
#define WXDLLIMPEXP_STC
|
|
|
|
#endif
|
|
|
|
|
2007-10-01 08:14:35 -04:00
|
|
|
/*
|
|
|
|
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__))
|
2007-07-09 06:12:51 -04:00
|
|
|
#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_RICHTEXT
|
|
|
|
#define WXDLLIMPEXP_FWD_MEDIA
|
|
|
|
#define WXDLLIMPEXP_FWD_STC
|
|
|
|
#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_RICHTEXT WXDLLIMPEXP_RICHTEXT
|
|
|
|
#define WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_MEDIA
|
|
|
|
#define WXDLLIMPEXP_FWD_STC WXDLLIMPEXP_STC
|
|
|
|
#endif
|
2007-07-09 06:09:52 -04:00
|
|
|
|
2003-10-16 06:25:56 -04:00
|
|
|
/* for backwards compatibility, define suffix-less versions too */
|
|
|
|
#define WXDLLEXPORT WXDLLIMPEXP_CORE
|
|
|
|
#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE
|
|
|
|
|
2007-09-14 17:02:09 -04:00
|
|
|
/*
|
|
|
|
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 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 */
|
|
|
|
|
2003-10-16 06:25:56 -04:00
|
|
|
#endif /* _WX_DLIMPEXP_H_ */
|
|
|
|
|