1 /* 2 * Name: wx/dlimpexp.h 3 * Purpose: Macros for declaring DLL-imported/exported functions 4 * Author: Vadim Zeitlin 5 * Modified by: 6 * Created: 16.10.2003 (extracted from wx/defs.h) 7 * RCS-ID: $Id: dlimpexp.h 49563 2007-10-31 20:46:21Z VZ $ 8 * Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> 9 * Licence: wxWindows licence 10 */ 11 12 /* 13 This is a C file, not C++ one, do not use C++ comments here! 14 */ 15 16 #ifndef _WX_DLIMPEXP_H_ 17 #define _WX_DLIMPEXP_H_ 18 19 #if defined(__WXMSW__) 20 /* 21 __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well 22 as VC++ and gcc 23 */ 24 # if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) 25 # define WXEXPORT __declspec(dllexport) 26 # define WXIMPORT __declspec(dllimport) 27 # else /* compiler doesn't support __declspec() */ 28 # define WXEXPORT 29 # define WXIMPORT 30 # endif 31 #elif defined(__WXPM__) 32 # if defined (__WATCOMC__) 33 # define WXEXPORT __declspec(dllexport) 34 /* 35 __declspec(dllimport) prepends __imp to imported symbols. We do NOT 36 want that! 37 */ 38 # define WXIMPORT 39 # elif defined(__EMX__) 40 # define WXEXPORT 41 # define WXIMPORT 42 # elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 ))) 43 # define WXEXPORT _Export 44 # define WXIMPORT _Export 45 # endif 46 #elif defined(__WXMAC__) || defined(__WXCOCOA__) 47 # ifdef __MWERKS__ 48 # define WXEXPORT __declspec(export) 49 # define WXIMPORT __declspec(import) 50 # endif 51 #elif defined(__CYGWIN__) 52 # define WXEXPORT __declspec(dllexport) 53 # define WXIMPORT __declspec(dllimport) 54 #endif 55 56 /* for other platforms/compilers we don't anything */ 57 #ifndef WXEXPORT 58 # define WXEXPORT 59 # define WXIMPORT 60 #endif 61 62 /* 63 We support building wxWidgets as a set of several libraries but we don't 64 support arbitrary combinations of libs/DLLs: either we build all of them as 65 DLLs (in which case WXMAKINGDLL is defined) or none (it isn't). 66 67 However we have a problem because we need separate WXDLLEXPORT versions for 68 different libraries as, for example, wxString class should be dllexported 69 when compiled in wxBase and dllimported otherwise, so we do define separate 70 WXMAKING/USINGDLL_XYZ constants for each component XYZ. 71 */ 72 #ifdef WXMAKINGDLL 73 # if wxUSE_BASE 74 # define WXMAKINGDLL_BASE 75 # endif 76 77 # define WXMAKINGDLL_NET 78 # define WXMAKINGDLL_CORE 79 # define WXMAKINGDLL_ADV 80 # define WXMAKINGDLL_QA 81 # define WXMAKINGDLL_ODBC 82 # define WXMAKINGDLL_DBGRID 83 # define WXMAKINGDLL_HTML 84 # define WXMAKINGDLL_GL 85 # define WXMAKINGDLL_XML 86 # define WXMAKINGDLL_XRC 87 # define WXMAKINGDLL_AUI 88 # define WXMAKINGDLL_RICHTEXT 89 # define WXMAKINGDLL_MEDIA 90 #endif /* WXMAKINGDLL */ 91 92 /* 93 WXDLLEXPORT maps to export declaration when building the DLL, to import 94 declaration if using it or to nothing at all if we don't use wxWin as DLL 95 */ 96 #ifdef WXMAKINGDLL_BASE 97 # define WXDLLIMPEXP_BASE WXEXPORT 98 # define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type 99 #elif defined(WXUSINGDLL) 100 # define WXDLLIMPEXP_BASE WXIMPORT 101 # define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type 102 #else /* not making nor using DLL */ 103 # define WXDLLIMPEXP_BASE 104 # define WXDLLIMPEXP_DATA_BASE(type) type 105 #endif 106 107 #ifdef WXMAKINGDLL_NET 108 # define WXDLLIMPEXP_NET WXEXPORT 109 # define WXDLLIMPEXP_DATA_NET(type) WXEXPORT type 110 #elif defined(WXUSINGDLL) 111 # define WXDLLIMPEXP_NET WXIMPORT 112 # define WXDLLIMPEXP_DATA_NET(type) WXIMPORT type 113 #else /* not making nor using DLL */ 114 # define WXDLLIMPEXP_NET 115 # define WXDLLIMPEXP_DATA_NET(type) type 116 #endif 117 118 #ifdef WXMAKINGDLL_CORE 119 # define WXDLLIMPEXP_CORE WXEXPORT 120 # define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type 121 #elif defined(WXUSINGDLL) 122 # define WXDLLIMPEXP_CORE WXIMPORT 123 # define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type 124 #else /* not making nor using DLL */ 125 # define WXDLLIMPEXP_CORE 126 # define WXDLLIMPEXP_DATA_CORE(type) type 127 #endif 128 129 #ifdef WXMAKINGDLL_ADV 130 # define WXDLLIMPEXP_ADV WXEXPORT 131 # define WXDLLIMPEXP_DATA_ADV(type) WXEXPORT type 132 #elif defined(WXUSINGDLL) 133 # define WXDLLIMPEXP_ADV WXIMPORT 134 # define WXDLLIMPEXP_DATA_ADV(type) WXIMPORT type 135 #else /* not making nor using DLL */ 136 # define WXDLLIMPEXP_ADV 137 # define WXDLLIMPEXP_DATA_ADV(type) type 138 #endif 139 140 #ifdef WXMAKINGDLL_ODBC 141 # define WXDLLIMPEXP_ODBC WXEXPORT 142 # define WXDLLIMPEXP_DATA_ODBC(type) WXEXPORT type 143 #elif defined(WXUSINGDLL) 144 # define WXDLLIMPEXP_ODBC WXIMPORT 145 # define WXDLLIMPEXP_DATA_ODBC(type) WXIMPORT type 146 #else /* not making nor using DLL */ 147 # define WXDLLIMPEXP_ODBC 148 # define WXDLLIMPEXP_DATA_ODBC(type) type 149 #endif 150 151 #ifdef WXMAKINGDLL_QA 152 # define WXDLLIMPEXP_QA WXEXPORT 153 # define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type 154 #elif defined(WXUSINGDLL) 155 # define WXDLLIMPEXP_QA WXIMPORT 156 # define WXDLLIMPEXP_DATA_QA(type) WXIMPORT type 157 #else /* not making nor using DLL */ 158 # define WXDLLIMPEXP_QA 159 # define WXDLLIMPEXP_DATA_QA(type) type 160 #endif 161 162 #ifdef WXMAKINGDLL_DBGRID 163 # define WXDLLIMPEXP_DBGRID WXEXPORT 164 # define WXDLLIMPEXP_DATA_DBGRID(type) WXEXPORT type 165 #elif defined(WXUSINGDLL) 166 # define WXDLLIMPEXP_DBGRID WXIMPORT 167 # define WXDLLIMPEXP_DATA_DBGRID(type) WXIMPORT type 168 #else /* not making nor using DLL */ 169 # define WXDLLIMPEXP_DBGRID 170 # define WXDLLIMPEXP_DATA_DBGRID(type) type 171 #endif 172 173 #ifdef WXMAKINGDLL_HTML 174 # define WXDLLIMPEXP_HTML WXEXPORT 175 # define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type 176 #elif defined(WXUSINGDLL) 177 # define WXDLLIMPEXP_HTML WXIMPORT 178 # define WXDLLIMPEXP_DATA_HTML(type) WXIMPORT type 179 #else /* not making nor using DLL */ 180 # define WXDLLIMPEXP_HTML 181 # define WXDLLIMPEXP_DATA_HTML(type) type 182 #endif 183 184 #ifdef WXMAKINGDLL_GL 185 # define WXDLLIMPEXP_GL WXEXPORT 186 #elif defined(WXUSINGDLL) 187 # define WXDLLIMPEXP_GL WXIMPORT 188 #else /* not making nor using DLL */ 189 # define WXDLLIMPEXP_GL 190 #endif 191 192 #ifdef WXMAKINGDLL_XML 193 # define WXDLLIMPEXP_XML WXEXPORT 194 #elif defined(WXUSINGDLL) 195 # define WXDLLIMPEXP_XML WXIMPORT 196 #else /* not making nor using DLL */ 197 # define WXDLLIMPEXP_XML 198 #endif 199 200 #ifdef WXMAKINGDLL_XRC 201 # define WXDLLIMPEXP_XRC WXEXPORT 202 #elif defined(WXUSINGDLL) 203 # define WXDLLIMPEXP_XRC WXIMPORT 204 #else /* not making nor using DLL */ 205 # define WXDLLIMPEXP_XRC 206 #endif 207 208 #ifdef WXMAKINGDLL_AUI 209 # define WXDLLIMPEXP_AUI WXEXPORT 210 #elif defined(WXUSINGDLL) 211 # define WXDLLIMPEXP_AUI WXIMPORT 212 #else /* not making nor using DLL */ 213 # define WXDLLIMPEXP_AUI 214 #endif 215 216 #ifdef WXMAKINGDLL_RICHTEXT 217 # define WXDLLIMPEXP_RICHTEXT WXEXPORT 218 #elif defined(WXUSINGDLL) 219 # define WXDLLIMPEXP_RICHTEXT WXIMPORT 220 #else /* not making nor using DLL */ 221 # define WXDLLIMPEXP_RICHTEXT 222 #endif 223 224 #ifdef WXMAKINGDLL_MEDIA 225 # define WXDLLIMPEXP_MEDIA WXEXPORT 226 #elif defined(WXUSINGDLL) 227 # define WXDLLIMPEXP_MEDIA WXIMPORT 228 #else /* not making nor using DLL */ 229 # define WXDLLIMPEXP_MEDIA 230 #endif 231 232 /* for backwards compatibility, define suffix-less versions too */ 233 #define WXDLLEXPORT WXDLLIMPEXP_CORE 234 #define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE 235 236 /* wx-2.9 introduces new macros for forward declarations, include them 237 * here for forward compatibility: 238 239 GCC warns about using __attribute__ (and also __declspec in mingw32 case) on 240 forward declarations while MSVC complains about forward declarations without 241 __declspec for the classes later declared with it, so we need a separate set 242 of macros for forward declarations to hide this difference: 243 */ 244 #if defined(__WINDOWS__) && defined(__GNUC__) 245 #define WXDLLIMPEXP_FWD_BASE 246 #define WXDLLIMPEXP_FWD_NET 247 #define WXDLLIMPEXP_FWD_CORE 248 #define WXDLLIMPEXP_FWD_ADV 249 #define WXDLLIMPEXP_FWD_QA 250 #define WXDLLIMPEXP_FWD_HTML 251 #define WXDLLIMPEXP_FWD_GL 252 #define WXDLLIMPEXP_FWD_XML 253 #define WXDLLIMPEXP_FWD_XRC 254 #define WXDLLIMPEXP_FWD_AUI 255 #define WXDLLIMPEXP_FWD_RICHTEXT 256 #define WXDLLIMPEXP_FWD_MEDIA 257 #define WXDLLIMPEXP_FWD_STC 258 #else 259 #define WXDLLIMPEXP_FWD_BASE WXDLLIMPEXP_BASE 260 #define WXDLLIMPEXP_FWD_NET WXDLLIMPEXP_NET 261 #define WXDLLIMPEXP_FWD_CORE WXDLLIMPEXP_CORE 262 #define WXDLLIMPEXP_FWD_ADV WXDLLIMPEXP_ADV 263 #define WXDLLIMPEXP_FWD_QA WXDLLIMPEXP_QA 264 #define WXDLLIMPEXP_FWD_HTML WXDLLIMPEXP_HTML 265 #define WXDLLIMPEXP_FWD_GL WXDLLIMPEXP_GL 266 #define WXDLLIMPEXP_FWD_XML WXDLLIMPEXP_XML 267 #define WXDLLIMPEXP_FWD_XRC WXDLLIMPEXP_XRC 268 #define WXDLLIMPEXP_FWD_AUI WXDLLIMPEXP_AUI 269 #define WXDLLIMPEXP_FWD_RICHTEXT WXDLLIMPEXP_RICHTEXT 270 #define WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_MEDIA 271 #define WXDLLIMPEXP_FWD_STC WXDLLIMPEXP_STC 272 #endif 273 274 #endif /* _WX_DLIMPEXP_H_ */ 275 276