From d7c429142df39ccb1e8a4f68c4e2bb0ab7c2083a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 6 Feb 2002 14:40:34 +0000 Subject: [PATCH] fixes for METHODDEF definition git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14032 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/imagjpeg.cpp | 39 +++++++++++++++++++++++++-------------- src/jpeg/jmorecfg.h | 32 ++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/common/imagjpeg.cpp b/src/common/imagjpeg.cpp index c8db0ce961..23c5e7aa36 100644 --- a/src/common/imagjpeg.cpp +++ b/src/common/imagjpeg.cpp @@ -53,15 +53,26 @@ extern "C" #include #ifdef __SALFORDC__ -#ifdef FAR #undef FAR #endif -#endif -// we can't use METHODDEF here as it includes static yet the functions must be -// extern "C" and these can't be used together! -#undef METHODDEF -#define METHODDEF(type) extern "C" type wxC_CALLING_CONV +// ---------------------------------------------------------------------------- +// types +// ---------------------------------------------------------------------------- + +// the standard definition of METHODDEF(type) from jmorecfg.h is "static type" +// which means that we can't declare the method functions as extern "C" - the +// compiler (rightfully) complains about the multiple storage classes in +// declaration +// +// so we only add extern "C" when using our own, modified, jmorecfg.h - and use +// whatever we have in the system headers if this is what we use hoping that it +// should be ok (can't do anything else) +#ifdef JPEG_METHOD_LINKAGE + #define CPP_METHODDEF(type) extern "C" METHODDEF(type) +#else // not using our jmorecfg.h header + #define CPP_METHODDEF(type) METHODDEF(type) +#endif //----------------------------------------------------------------------------- // wxJPEGHandler @@ -84,11 +95,11 @@ typedef struct { typedef my_source_mgr * my_src_ptr; -METHODDEF(void) my_init_source ( j_decompress_ptr WXUNUSED(cinfo) ) +CPP_METHODDEF(void) my_init_source ( j_decompress_ptr WXUNUSED(cinfo) ) { } -METHODDEF(boolean) my_fill_input_buffer ( j_decompress_ptr cinfo ) +CPP_METHODDEF(boolean) my_fill_input_buffer ( j_decompress_ptr cinfo ) { my_src_ptr src = (my_src_ptr) cinfo->src; @@ -105,7 +116,7 @@ METHODDEF(boolean) my_fill_input_buffer ( j_decompress_ptr cinfo ) return TRUE; } -METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes ) +CPP_METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes ) { if (num_bytes > 0) { @@ -121,7 +132,7 @@ METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes ) } } -METHODDEF(void) my_term_source ( j_decompress_ptr cinfo ) +CPP_METHODDEF(void) my_term_source ( j_decompress_ptr cinfo ) { my_src_ptr src = (my_src_ptr) cinfo->src; @@ -145,7 +156,7 @@ typedef struct my_error_mgr * my_error_ptr; * Here's the routine that will replace the standard error_exit method: */ -METHODDEF(void) my_error_exit (j_common_ptr cinfo) +CPP_METHODDEF(void) my_error_exit (j_common_ptr cinfo) { /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ my_error_ptr myerr = (my_error_ptr) cinfo->err; @@ -254,7 +265,7 @@ typedef my_destination_mgr * my_dest_ptr; #define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ -METHODDEF(void) init_destination (j_compress_ptr cinfo) +CPP_METHODDEF(void) init_destination (j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr) cinfo->dest; @@ -266,7 +277,7 @@ METHODDEF(void) init_destination (j_compress_ptr cinfo) dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; } -METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo) +CPP_METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr) cinfo->dest; @@ -276,7 +287,7 @@ METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo) return TRUE; } -METHODDEF(void) term_destination (j_compress_ptr cinfo) +CPP_METHODDEF(void) term_destination (j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr) cinfo->dest; size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer; diff --git a/src/jpeg/jmorecfg.h b/src/jpeg/jmorecfg.h index bc9e62b659..29b33d0235 100644 --- a/src/jpeg/jmorecfg.h +++ b/src/jpeg/jmorecfg.h @@ -208,25 +208,29 @@ typedef unsigned int JDIMENSION; * or code profilers that require it. */ -#if defined(__VISAGECPP__) /* need this for /common/imagjpeg.obj but not loclly */ -/* a function called through method pointers: */ -#define METHODDEF(type) static type _Optlink -/* a function used only in its module: */ -#define LOCAL(type) static type _Optlink -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type _Optlink -#else +#if defined(__VISAGECPP__) +#define JPEG_CALLING_CONV _Optlink +#else /* !Visual Age C++ */ +#define JPEG_CALLING_CONV +#endif + +/* We can't declare a static function as extern "C" as we need to do in C++ + * programs, so suppress static in METHODDEF when using C++. + */ +#if defined(__cplusplus) +#define JPEG_METHOD_LINKAGE +#else /* !__cplusplus */ +#define JPEG_METHOD_LINKAGE static +#endif + /* a function called through method pointers: */ -#define METHODDEF(type) static type +#define METHODDEF(type) JPEG_METHOD_LINKAGE type JPEG_CALLING_CONV /* a function used only in its module: */ -#define LOCAL(type) static type +#define LOCAL(type) static type JPEG_CALLING_CONV /* a function referenced thru EXTERNs: */ #define GLOBAL(type) type /* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type -#endif +#define EXTERN(type) extern type JPEG_CALLING_CONV /* This macro is used to declare a "method", that is, a function pointer. * We want to supply prototype parameters if the compiler can cope. -- 2.45.2