]> git.saurik.com Git - wxWidgets.git/blob - include/wx/dlimpexp.h
let _T() work with macros (modified patch 1437983)
[wxWidgets.git] / include / wx / dlimpexp.h
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$
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_ODBC
81 # define WXMAKINGDLL_DBGRID
82 # define WXMAKINGDLL_HTML
83 # define WXMAKINGDLL_GL
84 # define WXMAKINGDLL_XML
85 # define WXMAKINGDLL_XRC
86 # define WXMAKINGDLL_MEDIA
87 #endif /* WXMAKINGDLL */
88
89 /*
90 WXDLLEXPORT maps to export declaration when building the DLL, to import
91 declaration if using it or to nothing at all if we don't use wxWin as DLL
92 */
93 #ifdef WXMAKINGDLL_BASE
94 # define WXDLLIMPEXP_BASE WXEXPORT
95 # define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type
96 #elif defined(WXUSINGDLL)
97 # define WXDLLIMPEXP_BASE WXIMPORT
98 # define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type
99 #else /* not making nor using DLL */
100 # define WXDLLIMPEXP_BASE
101 # define WXDLLIMPEXP_DATA_BASE(type) type
102 #endif
103
104 #ifdef WXMAKINGDLL_NET
105 # define WXDLLIMPEXP_NET WXEXPORT
106 # define WXDLLIMPEXP_DATA_NET(type) WXEXPORT type
107 #elif defined(WXUSINGDLL)
108 # define WXDLLIMPEXP_NET WXIMPORT
109 # define WXDLLIMPEXP_DATA_NET(type) WXIMPORT type
110 #else /* not making nor using DLL */
111 # define WXDLLIMPEXP_NET
112 # define WXDLLIMPEXP_DATA_NET(type) type
113 #endif
114
115 #ifdef WXMAKINGDLL_CORE
116 # define WXDLLIMPEXP_CORE WXEXPORT
117 # define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type
118 #elif defined(WXUSINGDLL)
119 # define WXDLLIMPEXP_CORE WXIMPORT
120 # define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type
121 #else /* not making nor using DLL */
122 # define WXDLLIMPEXP_CORE
123 # define WXDLLIMPEXP_DATA_CORE(type) type
124 #endif
125
126 #ifdef WXMAKINGDLL_ADV
127 # define WXDLLIMPEXP_ADV WXEXPORT
128 # define WXDLLIMPEXP_DATA_ADV(type) WXEXPORT type
129 #elif defined(WXUSINGDLL)
130 # define WXDLLIMPEXP_ADV WXIMPORT
131 # define WXDLLIMPEXP_DATA_ADV(type) WXIMPORT type
132 #else /* not making nor using DLL */
133 # define WXDLLIMPEXP_ADV
134 # define WXDLLIMPEXP_DATA_ADV(type) type
135 #endif
136
137 #ifdef WXMAKINGDLL_ODBC
138 # define WXDLLIMPEXP_ODBC WXEXPORT
139 # define WXDLLIMPEXP_DATA_ODBC(type) WXEXPORT type
140 #elif defined(WXUSINGDLL)
141 # define WXDLLIMPEXP_ODBC WXIMPORT
142 # define WXDLLIMPEXP_DATA_ODBC(type) WXIMPORT type
143 #else /* not making nor using DLL */
144 # define WXDLLIMPEXP_ODBC
145 # define WXDLLIMPEXP_DATA_ODBC(type) type
146 #endif
147
148 #ifdef WXMAKINGDLL_QA
149 # define WXDLLIMPEXP_QA WXEXPORT
150 # define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type
151 #elif defined(WXUSINGDLL)
152 # define WXDLLIMPEXP_QA WXIMPORT
153 # define WXDLLIMPEXP_DATA_QA(type) WXIMPORT type
154 #else /* not making nor using DLL */
155 # define WXDLLIMPEXP_QA
156 # define WXDLLIMPEXP_DATA_QA(type) type
157 #endif
158
159 #ifdef WXMAKINGDLL_DBGRID
160 # define WXDLLIMPEXP_DBGRID WXEXPORT
161 # define WXDLLIMPEXP_DATA_DBGRID(type) WXEXPORT type
162 #elif defined(WXUSINGDLL)
163 # define WXDLLIMPEXP_DBGRID WXIMPORT
164 # define WXDLLIMPEXP_DATA_DBGRID(type) WXIMPORT type
165 #else /* not making nor using DLL */
166 # define WXDLLIMPEXP_DBGRID
167 # define WXDLLIMPEXP_DATA_DBGRID(type) type
168 #endif
169
170 #ifdef WXMAKINGDLL_HTML
171 # define WXDLLIMPEXP_HTML WXEXPORT
172 # define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type
173 #elif defined(WXUSINGDLL)
174 # define WXDLLIMPEXP_HTML WXIMPORT
175 # define WXDLLIMPEXP_DATA_HTML(type) WXIMPORT type
176 #else /* not making nor using DLL */
177 # define WXDLLIMPEXP_HTML
178 # define WXDLLIMPEXP_DATA_HTML(type) type
179 #endif
180
181 #ifdef WXMAKINGDLL_GL
182 # define WXDLLIMPEXP_GL WXEXPORT
183 #elif defined(WXUSINGDLL)
184 # define WXDLLIMPEXP_GL WXIMPORT
185 #else /* not making nor using DLL */
186 # define WXDLLIMPEXP_GL
187 #endif
188
189 #ifdef WXMAKINGDLL_XML
190 # define WXDLLIMPEXP_XML WXEXPORT
191 #elif defined(WXUSINGDLL)
192 # define WXDLLIMPEXP_XML WXIMPORT
193 #else /* not making nor using DLL */
194 # define WXDLLIMPEXP_XML
195 #endif
196
197 #ifdef WXMAKINGDLL_XRC
198 # define WXDLLIMPEXP_XRC WXEXPORT
199 #elif defined(WXUSINGDLL)
200 # define WXDLLIMPEXP_XRC WXIMPORT
201 #else /* not making nor using DLL */
202 # define WXDLLIMPEXP_XRC
203 #endif
204
205 #ifdef WXMAKINGDLL_MEDIA
206 # define WXDLLIMPEXP_MEDIA WXEXPORT
207 #elif defined(WXUSINGDLL)
208 # define WXDLLIMPEXP_MEDIA WXIMPORT
209 #else /* not making nor using DLL */
210 # define WXDLLIMPEXP_MEDIA
211 #endif
212
213 /* for backwards compatibility, define suffix-less versions too */
214 #define WXDLLEXPORT WXDLLIMPEXP_CORE
215 #define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE
216
217 #endif /* _WX_DLIMPEXP_H_ */
218