]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dlimpexp.h
take const address objects in wxSocketClient::Connect() and wxSocketBase::SetLocal()
[wxWidgets.git] / include / wx / dlimpexp.h
index 3df4f4e603b851f0ec17604a255eb413ccc928ff..8b88602f04d2f049e864dad4542ab3056d4fd483 100644 (file)
@@ -67,7 +67,7 @@
    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
+   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.
@@ -81,8 +81,6 @@
 #    define WXMAKINGDLL_CORE
 #    define WXMAKINGDLL_ADV
 #    define WXMAKINGDLL_QA
-#    define WXMAKINGDLL_ODBC
-#    define WXMAKINGDLL_DBGRID
 #    define WXMAKINGDLL_HTML
 #    define WXMAKINGDLL_GL
 #    define WXMAKINGDLL_XML
@@ -94,7 +92,7 @@
 #endif /* WXMAKINGDLL */
 
 /*
-   WXDLLEXPORT maps to export declaration when building the DLL, to import
+   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_DATA_ADV(type) type
 #endif
 
-#ifdef WXMAKINGDLL_ODBC
-#    define WXDLLIMPEXP_ODBC WXEXPORT
-#    define WXDLLIMPEXP_DATA_ODBC(type) WXEXPORT type
-#elif defined(WXUSINGDLL)
-#    define WXDLLIMPEXP_ODBC WXIMPORT
-#    define WXDLLIMPEXP_DATA_ODBC(type) WXIMPORT type
-#else /* not making nor using DLL */
-#    define WXDLLIMPEXP_ODBC
-#    define WXDLLIMPEXP_DATA_ODBC(type) type
-#endif
-
 #ifdef WXMAKINGDLL_QA
 #    define WXDLLIMPEXP_QA WXEXPORT
 #    define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type
 #    define WXDLLIMPEXP_DATA_QA(type) type
 #endif
 
-#ifdef WXMAKINGDLL_DBGRID
-#    define WXDLLIMPEXP_DBGRID WXEXPORT
-#    define WXDLLIMPEXP_DATA_DBGRID(type) WXEXPORT type
-#elif defined(WXUSINGDLL)
-#    define WXDLLIMPEXP_DBGRID WXIMPORT
-#    define WXDLLIMPEXP_DATA_DBGRID(type) WXIMPORT type
-#else /* not making nor using DLL */
-#    define WXDLLIMPEXP_DBGRID
-#    define WXDLLIMPEXP_DATA_DBGRID(type) type
-#endif
-
 #ifdef WXMAKINGDLL_HTML
 #    define WXDLLIMPEXP_HTML WXEXPORT
 #    define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type
     #define WXDLLIMPEXP_STC
 #endif
 
-/* GCC warns about using __attribute__ on forward declarations, so we need
-   another set of macros for them: */
-#if defined(HAVE_VISIBILITY)
+/*
+   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_ODBC
-    #define WXDLLIMPEXP_FWD_DBGRID
     #define WXDLLIMPEXP_FWD_HTML
     #define WXDLLIMPEXP_FWD_GL
     #define WXDLLIMPEXP_FWD_XML
     #define WXDLLIMPEXP_FWD_CORE      WXDLLIMPEXP_CORE
     #define WXDLLIMPEXP_FWD_ADV       WXDLLIMPEXP_ADV
     #define WXDLLIMPEXP_FWD_QA        WXDLLIMPEXP_QA
-    #define WXDLLIMPEXP_FWD_ODBC      WXDLLIMPEXP_ODBC
-    #define WXDLLIMPEXP_FWD_DBGRID    WXDLLIMPEXP_DBGRID
     #define WXDLLIMPEXP_FWD_HTML      WXDLLIMPEXP_HTML
     #define WXDLLIMPEXP_FWD_GL        WXDLLIMPEXP_GL
     #define WXDLLIMPEXP_FWD_XML       WXDLLIMPEXP_XML
 #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_ */