-#define DECLARE_LOG_FUNCTION(level) \
-extern void WXDLLEXPORT wxLog##level(const wxChar *szFormat, ...)
-#define DECLARE_LOG_FUNCTION2(level, arg1) \
-extern void WXDLLEXPORT wxLog##level(arg1, const wxChar *szFormat, ...)
+#define DECLARE_LOG_FUNCTION(level) \
+extern void WXDLLIMPEXP_BASE wxVLog##level(const wxChar *szFormat, \
+ va_list argptr); \
+extern void WXDLLIMPEXP_BASE wxLog##level(const wxChar *szFormat, \
+ ...) ATTRIBUTE_PRINTF_1
+#define DECLARE_LOG_FUNCTION2_EXP(level, argclass, arg, expdecl) \
+extern void expdecl wxVLog##level(argclass arg, \
+ const wxChar *szFormat, \
+ va_list argptr); \
+extern void expdecl wxLog##level(argclass arg, \
+ const wxChar *szFormat, \
+ ...) ATTRIBUTE_PRINTF_2
+#else // !wxUSE_LOG
+
+// log functions do nothing at all
+#define DECLARE_LOG_FUNCTION(level) \
+inline void wxVLog##level(const wxChar *WXUNUSED(szFormat), \
+ va_list WXUNUSED(argptr)) { } \
+inline void wxLog##level(const wxChar *WXUNUSED(szFormat), \
+ ...) { }
+#define DECLARE_LOG_FUNCTION2_EXP(level, argclass, arg, expdecl) \
+inline void wxVLog##level(argclass WXUNUSED(arg), \
+ const wxChar *WXUNUSED(szFormat), \
+ va_list WXUNUSED(argptr)) {} \
+inline void wxLog##level(argclass WXUNUSED(arg), \
+ const wxChar *WXUNUSED(szFormat), \
+ ...) { }
+
+// Empty Class to fake wxLogNull
+class WXDLLIMPEXP_BASE wxLogNull
+{
+public:
+ wxLogNull() { }
+};