moved DLL import/export declarations from wx/defs.h to (new) wx/dlimpexp.h for GSocket; added wxUnusedVar() and wxDUMMY_INITIALIZE() to wx/defs.h

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24195 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2003-10-16 10:25:56 +00:00
parent d4864e971b
commit 0cc66b6c0b
5 changed files with 223 additions and 182 deletions

View File

@ -217,6 +217,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/debug.h
wx/defs.h
wx/dir.h
wx/dlimpexp.h
wx/dynarray.h
wx/dynlib.h
wx/dynload.h

View File

@ -16,6 +16,10 @@
#pragma interface "defs.h"
#endif
#ifndef __cplusplus
#error "This header is for C++ code only"
#endif
// ----------------------------------------------------------------------------
// compiler and OS identification
// ----------------------------------------------------------------------------
@ -350,165 +354,8 @@ typedef int wxWindowID;
// compatibility :-(
#define CMPFUNC_CONV wxCMPFUNC_CONV
// ----------------------------------------------------------------------------
// Making or using wxWindows as a Windows DLL
// ----------------------------------------------------------------------------
#if defined(__WXMSW__)
// __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
#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
#endif
// for other platforms/compilers we don't anything
#ifndef WXEXPORT
#define WXEXPORT
#define WXIMPORT
#endif
/*
We support building wxWindows 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 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
#define WXMAKINGDLL_ODBC
#define WXMAKINGDLL_DBGRID
#define WXMAKINGDLL_HTML
#define WXMAKINGDLL_XML
#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
#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_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
#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
// for backwards compatibility, define suffix-less versions too
#define WXDLLEXPORT WXDLLIMPEXP_CORE
#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE
// DLL import/export declarations
#include "wx/dlimpexp.h"
// ----------------------------------------------------------------------------
// Very common macros
@ -545,29 +392,13 @@ typedef int wxWindowID;
#endif
// everybody gets the assert and other debug macros
#ifdef __cplusplus
#include "wx/debug.h"
#endif
// NULL declaration: it must be defined as 0 for C++ programs (in particular,
// it must not be defined as "(void *)0" which is standard for C but completely
// breaks C++ code)
#include <stddef.h>
// Macro to cut down on compiler warnings.
#if REMOVE_UNUSED_ARG
#define WXUNUSED(identifier) /* identifier */
#else // stupid, broken compiler
#define WXUNUSED(identifier) identifier
#endif
// some arguments are only used in debug mode, but unused in release one
#ifdef __WXDEBUG__
#define WXUNUSED_UNLESS_DEBUG(param) param
#else
#define WXUNUSED_UNLESS_DEBUG(param) WXUNUSED(param)
#endif
// delete pointer if it is not NULL and NULL it afterwards
// (checking that it's !NULL before passing it to delete is just a
// a question of style, because delete will do it itself anyhow, but it might
@ -596,6 +427,39 @@ typedef int wxWindowID;
// integer on success as failure indicator
#define wxNOT_FOUND (-1)
// ----------------------------------------------------------------------------
// macros to avoid compiler warnings
// ----------------------------------------------------------------------------
// Macro to cut down on compiler warnings.
#if 1 // there should be no more any compilers needing the "#else" version
#define WXUNUSED(identifier) /* identifier */
#else // stupid, broken compiler
#define WXUNUSED(identifier) identifier
#endif
// some arguments are only used in debug mode, but unused in release one
#ifdef __WXDEBUG__
#define WXUNUSED_UNLESS_DEBUG(param) param
#else
#define WXUNUSED_UNLESS_DEBUG(param) WXUNUSED(param)
#endif
// some compilers give warning about a possibly unused variable if it is
// initialized in both branches of if/else and shut up if it is initialized
// when declared, but other compilers then give warnings about unused variable
// value -- this should satisfy both of them
#if defined(__VISUALC__)
#define wxDUMMY_INITIALIZE(val) = val
#else
#define wxDUMMY_INITIALIZE(val)
#endif
// sometimes the value of a variable is *really* not used, to suppress the
// resulting warning you may pass it to this function
template <typename T>
inline void wxUnusedVar(const T& WXUNUSED(t)) { }
// ----------------------------------------------------------------------------
// compiler specific settings
// ----------------------------------------------------------------------------

182
include/wx/dlimpexp.h Normal file
View File

@ -0,0 +1,182 @@
/*
* 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$
* Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.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(__WXMSW__)
/*
__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
# 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
#endif
/* for other platforms/compilers we don't anything */
#ifndef WXEXPORT
# define WXEXPORT
# define WXIMPORT
#endif
/*
We support building wxWindows 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 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
# define WXMAKINGDLL_ODBC
# define WXMAKINGDLL_DBGRID
# define WXMAKINGDLL_HTML
# define WXMAKINGDLL_XML
#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
#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_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
#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
/* for backwards compatibility, define suffix-less versions too */
#define WXDLLEXPORT WXDLLIMPEXP_CORE
#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE
#endif /* _WX_DLIMPEXP_H_ */

View File

@ -14,12 +14,7 @@
#ifndef __GSOCKET_STANDALONE__
#include "wx/setup.h"
/* kludge for GTK.. gsockgtk.c craps out miserably if we include
defs.h ... no idea how other files get away with it.. */
#if !defined( __WXMSW__ ) && !defined( WXDLLIMPEXP_NET )
#define WXDLLIMPEXP_NET
#endif
#include "wx/dlimpexp.h" // for WXDLLIMPEXP_NET
#endif

View File

@ -36,7 +36,6 @@
#endif
#ifndef __GSOCKET_STANDALONE__
#include "wx/defs.h"
#include "wx/setup.h"
#endif