[glibmm/glibmm-master-use-dllexport: 5/6] glib/src: Decorate classes and methods with GLIBMM_API



commit 6352d84b1218a3298d0be3305dbfcba312a95b4a
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Thu Mar 5 15:45:00 2020 +0800

    glib/src: Decorate classes and methods with GLIBMM_API
    
    This prepares for us to export symbols using compiler directives, so that we
    can eventually retire gendef.exe.  This also makes the scripts place GLIBMM_API
    as appropriate for the generated Glib:Error classes and the wrap() method.

 glib/src/binding.hg              |  4 +--
 glib/src/bytearray.hg            |  4 +--
 glib/src/bytes.hg                |  4 +--
 glib/src/checksum.hg             |  4 +--
 glib/src/convert.hg              | 19 +++++++++++--
 glib/src/date.hg                 |  2 +-
 glib/src/datetime.hg             |  4 +--
 glib/src/fileutils.hg            | 14 +++++++---
 glib/src/iochannel.hg            |  7 ++---
 glib/src/keyfile.hg              |  6 ++---
 glib/src/markup.hg               |  9 ++++---
 glib/src/miscutils.hg            | 31 +++++++++++++++++++++
 glib/src/module.hg               |  2 +-
 glib/src/optioncontext.hg        |  4 +--
 glib/src/optionentry.hg          |  2 +-
 glib/src/optiongroup.hg          |  2 +-
 glib/src/regex.hg                |  8 +++---
 glib/src/shell.hg                |  5 +++-
 glib/src/spawn.hg                | 11 +++++++-
 glib/src/timezone.hg             |  4 +--
 glib/src/uriutils.hg             |  3 +++
 glib/src/value_basictypes.h.m4   |  2 +-
 glib/src/variant.hg              | 30 ++++++++++-----------
 glib/src/variant_basictypes.h.m4 |  2 +-
 glib/src/variantdict.hg          |  4 +--
 glib/src/variantiter.hg          |  8 +++---
 glib/src/varianttype.hg          | 58 ++++++++++++++++++++--------------------
 27 files changed, 162 insertions(+), 91 deletions(-)
---
diff --git a/glib/src/binding.hg b/glib/src/binding.hg
index 98bc3fc6..59a94624 100644
--- a/glib/src/binding.hg
+++ b/glib/src/binding.hg
@@ -98,9 +98,9 @@ namespace Glib
  *
  * @newin{2,44}
  */
-class Binding : public Glib::Object
+class GLIBMM_API Binding : public Glib::Object
 {
-  _CLASS_GOBJECT(Binding, GBinding, G_BINDING, Glib::Object, GObject)
+  _CLASS_GOBJECT(Binding, GBinding, G_BINDING, Glib::Object, GObject, , , GLIBMM_API)
 
 public:
   _WRAP_ENUM(Flags, GBindingFlags, newin "2,44")
diff --git a/glib/src/bytearray.hg b/glib/src/bytearray.hg
index 518080e8..5a1235f0 100644
--- a/glib/src/bytearray.hg
+++ b/glib/src/bytearray.hg
@@ -41,9 +41,9 @@ namespace Glib
  *
  * @newin{2,36}
  */
-class ByteArray final
+class GLIBMM_API ByteArray final
 {
-  _CLASS_OPAQUE_REFCOUNTED(ByteArray, GByteArray, NONE, g_byte_array_ref, g_byte_array_unref)
+  _CLASS_OPAQUE_REFCOUNTED(ByteArray, GByteArray, NONE, g_byte_array_ref, g_byte_array_unref, GLIBMM_API)
   _IS_REFCOUNTED_BOXEDTYPE
   _IGNORE(g_byte_array_ref, g_byte_array_unref)
 
diff --git a/glib/src/bytes.hg b/glib/src/bytes.hg
index 60b92d17..db0a23f7 100644
--- a/glib/src/bytes.hg
+++ b/glib/src/bytes.hg
@@ -49,9 +49,9 @@ namespace Glib
  *
  * @newin{2,34}
  */
-class Bytes final
+class GLIBMM_API Bytes final
 {
-  _CLASS_OPAQUE_REFCOUNTED(Bytes, GBytes, NONE, g_bytes_ref, g_bytes_unref)
+  _CLASS_OPAQUE_REFCOUNTED(Bytes, GBytes, NONE, g_bytes_ref, g_bytes_unref, GLIBMM_API)
   _IGNORE(g_bytes_ref, g_bytes_unref)
 public:
 
diff --git a/glib/src/checksum.hg b/glib/src/checksum.hg
index 2bb8e580..f07ec967 100644
--- a/glib/src/checksum.hg
+++ b/glib/src/checksum.hg
@@ -37,9 +37,9 @@ namespace Glib
  *
  * @newin{2,16}
  */
-class Checksum
+class GLIBMM_API Checksum
 {
-  _CLASS_BOXEDTYPE(Checksum, GChecksum, NONE, g_checksum_copy, g_checksum_free)
+  _CLASS_BOXEDTYPE(Checksum, GChecksum, NONE, g_checksum_copy, g_checksum_free, GLIBMM_API)
   _IGNORE(g_checksum_copy, g_checksum_free)
 
 public:
diff --git a/glib/src/convert.hg b/glib/src/convert.hg
index 9c211bc9..f0c7d3e6 100644
--- a/glib/src/convert.hg
+++ b/glib/src/convert.hg
@@ -40,7 +40,7 @@ namespace Glib
  * you should always catch those errors, and then try to recover, or tell the
  * user the input was invalid.
  */
-_WRAP_GERROR(ConvertError, GConvertError, G_CONVERT_ERROR, NO_GTYPE)
+_WRAP_GERROR(ConvertError, GConvertError, G_CONVERT_ERROR, NO_GTYPE, GLIBMM_API)
 
 
 /** Thin %iconv() wrapper.
@@ -49,7 +49,7 @@ _WRAP_GERROR(ConvertError, GConvertError, G_CONVERT_ERROR, NO_GTYPE)
  * creating an IConv object once and using the convert() method could
  * be useful when converting multiple times between the same charsets.
  */
-class IConv
+class GLIBMM_API IConv
 {
 public:
   /** Open new conversion descriptor.
@@ -107,12 +107,14 @@ private:
 /** Get the charset used by the current locale.
  * @return Whether the current locale uses the UTF-8 charset.
  */
+GLIBMM_API
 bool get_charset();
 
 /** Get the charset used by the current locale.
  * @param charset Will be filled with the charset's name.
  * @return Whether the current locale uses the UTF-8 charset.
  */
+GLIBMM_API
 bool get_charset(std::string& charset);
 
 /** Convert from one encoding to another.
@@ -122,6 +124,7 @@ bool get_charset(std::string& charset);
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string convert(const std::string& str,
                     const std::string& to_codeset,
                     const std::string& from_codeset);
@@ -136,6 +139,7 @@ std::string convert(const std::string& str,
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string convert_with_fallback(const std::string& str,
                                   const std::string& to_codeset,
                                   const std::string& from_codeset);
@@ -156,6 +160,7 @@ std::string convert_with_fallback(const std::string& str,
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string convert_with_fallback(const std::string& str,
                                   const std::string& to_codeset,
                                   const std::string& from_codeset,
@@ -168,6 +173,7 @@ std::string convert_with_fallback(const std::string& str,
  * @return The input string converted to UTF-8 encoding.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring locale_to_utf8(const std::string& opsys_string);
 
 /** Convert from UTF-8 to the current locale's encoding.
@@ -177,6 +183,7 @@ Glib::ustring locale_to_utf8(const std::string& opsys_string);
  *  system's current locale.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string locale_from_utf8(const Glib::ustring& utf8_string);
 
 /** Converts a string which is in the encoding used for filenames into
@@ -185,6 +192,7 @@ std::string locale_from_utf8(const Glib::ustring& utf8_string);
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring filename_to_utf8(const std::string& opsys_string);
 
 /** Converts a string from UTF-8 to the encoding used for filenames.
@@ -192,6 +200,7 @@ Glib::ustring filename_to_utf8(const std::string& opsys_string);
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string filename_from_utf8(const Glib::ustring& utf8_string);
 
 /** Converts an escaped UTF-8 encoded URI to a local filename
@@ -202,6 +211,7 @@ std::string filename_from_utf8(const Glib::ustring& utf8_string);
  * @return The resulting filename.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname);
 
 /** Converts an escaped UTF-8 encoded URI to a local filename in the encoding
@@ -210,6 +220,7 @@ std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname)
  * @return The resulting filename.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string filename_from_uri(const Glib::ustring& uri);
 
 /** Converts an absolute filename to an escaped UTF-8 encoded URI.
@@ -219,6 +230,7 @@ std::string filename_from_uri(const Glib::ustring& uri);
  * @return The resulting URI.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname);
 
 /** Converts an absolute filename to an escaped UTF-8 encoded URI.
@@ -227,6 +239,7 @@ Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring&
  * @return The resulting URI.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring filename_to_uri(const std::string& filename);
 
 /** Returns the display basename for the particular filename, guaranteed
@@ -243,6 +256,7 @@ Glib::ustring filename_to_uri(const std::string& filename);
  * @param filename An absolute pathname in the GLib file name encoding.
  * @result A string containing a rendition of the basename of the filename in valid UTF-8
  */
+GLIBMM_API
 Glib::ustring filename_display_basename(const std::string& filename);
 
 /** Converts a filename into a valid UTF-8 string. The
@@ -260,6 +274,7 @@ Glib::ustring filename_display_basename(const std::string& filename);
  * @param filename: a pathname hopefully in the GLib file name encoding
  * @result A string containing a rendition of the filename in valid UTF-8.
  */
+GLIBMM_API
 Glib::ustring filename_display_name(const std::string& filename);
 
 /** @} group CharsetConv */
diff --git a/glib/src/date.hg b/glib/src/date.hg
index 1633d07a..53356898 100644
--- a/glib/src/date.hg
+++ b/glib/src/date.hg
@@ -30,7 +30,7 @@ namespace Glib
 
 /** Julian calendar date.
  */
-class Date
+class GLIBMM_API Date
 {
 public:
   using Day = guint8 ;
diff --git a/glib/src/datetime.hg b/glib/src/datetime.hg
index 657efecf..1cd1d278 100644
--- a/glib/src/datetime.hg
+++ b/glib/src/datetime.hg
@@ -55,13 +55,13 @@ using TimeSpan = GTimeSpan;
  * in length).
  * @newin{2,30}
  */
-class DateTime
+class GLIBMM_API DateTime
 {
   // GDateTime is refcounted, but Glib::DateTime is not.
   // GDateTime is immutable. Therefore, there is no problem having several
   // Glib::DateTime instances wrap the same GDateTime, and it's easier to use
   // Glib::DateTime without Glib::RefPtr.
-  _CLASS_BOXEDTYPE(DateTime, GDateTime, NONE, g_date_time_ref, g_date_time_unref)
+  _CLASS_BOXEDTYPE(DateTime, GDateTime, NONE, g_date_time_ref, g_date_time_unref, GLIBMM_API)
   _IGNORE(g_date_time_ref, g_date_time_unref)
   _IGNORE(g_date_time_new_from_timeval_local, g_date_time_new_from_timeval_utc,
           g_date_time_to_timeval)dnl // deprecated
diff --git a/glib/src/fileutils.hg b/glib/src/fileutils.hg
index 1cbe3ebc..8b8512ac 100644
--- a/glib/src/fileutils.hg
+++ b/glib/src/fileutils.hg
@@ -59,7 +59,8 @@ _WRAP_GERROR(FileError, GFileError, G_FILE_ERROR, NO_GTYPE,
     s#^AGAIN$#TRYAGAIN#,
     s#^INTR$#INTERRUPTED#,
     s#^IO$#IO_ERROR#,
-    s#^PERM$#NOT_OWNER#
+    s#^PERM$#NOT_OWNER#,
+    GLIBMM_API
 )
 
 /** @var FileError::Code FileError::EXISTS
@@ -142,7 +143,7 @@ class Dir;
 /** The iterator type of Glib::Dir.
  * @ingroup FileUtils
  */
-class DirIterator
+class GLIBMM_API DirIterator
 {
 public:
   typedef std::input_iterator_tag   iterator_category;
@@ -186,7 +187,7 @@ private:
  * @note The encoding of the directory entries isn't necessarily UTF-8.
  * Use Glib::filename_to_utf8() if you need to display them.
  */
-class Dir
+class GLIBMM_API Dir
 {
 public:
   using iterator = DirIterator;
@@ -263,6 +264,7 @@ private:
  * @param test Bitfield of Glib::FileTest flags.
  * @return Whether a test was true.
  */
+GLIBMM_API
 bool file_test(const std::string& filename, FileTest test);
 
 /** Opens a temporary file.
@@ -278,6 +280,7 @@ bool file_test(const std::string& filename, FileTest test);
  *   is a difference. The file handle should be closed with close(). In
  *   case of errors, <tt>-1</tt> is returned.
  */
+GLIBMM_API
 int mkstemp(std::string& filename_template);
 
 /** Opens a file for writing in the preferred directory for temporary files
@@ -295,6 +298,7 @@ int mkstemp(std::string& filename_template);
  * difference. The file handle should be closed with <tt>close()</tt>.
  * @throw Glib::FileError
  */
+GLIBMM_API
 int file_open_tmp(std::string& name_used, const std::string& prefix);
 
 /** Opens a file for writing in the preferred directory for temporary files
@@ -309,6 +313,7 @@ int file_open_tmp(std::string& name_used, const std::string& prefix);
  * difference. The file handle should be closed with <tt>close()</tt>.
  * @throw Glib::FileError
  */
+GLIBMM_API
 int file_open_tmp(std::string& name_used);
 
 /** Reads an entire file into a string, with good error checking.
@@ -317,6 +322,7 @@ int file_open_tmp(std::string& name_used);
  * @return The file contents.
  * @throw Glib::FileError
  */
+GLIBMM_API
 std::string file_get_contents(const std::string& filename);
 
 /** Writes all of @a contents to a file named @a filename, with good error checking.
@@ -354,11 +360,13 @@ std::string file_get_contents(const std::string& filename);
  *
  * @newin{2,22}
  **/
+GLIBMM_API
 void file_set_contents (const std::string& filename, const gchar *contents, gssize length);
 /** A variant of file_set_contents which accepts a standard C++ string
  *
  * @newin{2,22}
  * */
+GLIBMM_API
 void file_set_contents (const std::string& filename, const std::string& contents);
 
 } // namespace Glib
diff --git a/glib/src/iochannel.hg b/glib/src/iochannel.hg
index 8c761d55..cf706a6f 100644
--- a/glib/src/iochannel.hg
+++ b/glib/src/iochannel.hg
@@ -72,7 +72,8 @@ _WRAP_GERROR(IOChannelError, GIOChannelError, G_IO_CHANNEL_ERROR, NO_GTYPE,
     s#^ACCES$#ACCESS_DENIED#,
     s#^FBIG$#FILE_TOO_BIG#,
     s#^IO$#IO_ERROR#,
-    s#^OVERFLOW$#OVERFLOWN#)
+    s#^OVERFLOW$#OVERFLOWN#,
+    GLIBMM_API)
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 class GlibmmIOChannel;
@@ -89,7 +90,7 @@ class GlibmmIOChannel;
  *
  * You can create an IOChannel with one of the static create methods.
  */
-class IOChannel : public sigc::trackable
+class GLIBMM_API IOChannel : public sigc::trackable
 {
   _CLASS_GENERIC(IOChannel, GIOChannel)
 
@@ -438,7 +439,7 @@ private:
   void release_gobject();
 };
 
-Glib::RefPtr<IOChannel> wrap(GIOChannel* gobject, bool take_copy = false);
+GLIBMM_API Glib::RefPtr<IOChannel> wrap(GIOChannel* gobject, bool take_copy = false);
 
 } // namespace Glib
 
diff --git a/glib/src/keyfile.hg b/glib/src/keyfile.hg
index a2641bb9..8dcacd86 100644
--- a/glib/src/keyfile.hg
+++ b/glib/src/keyfile.hg
@@ -33,7 +33,7 @@ namespace Glib
 
 /** Exception class for KeyFile errors.
  */
-_WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE)
+_WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE, GLIBMM_API)
 
 /** This class lets you parse, edit or create files containing groups of key-value pairs, which we call key 
files
  * for lack of a better name. Several freedesktop.org specifications use key files now, e.g the Desktop Entry
@@ -90,9 +90,9 @@ _WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE)
  *
  * @newin{2,14}
  */
-class KeyFile final
+class GLIBMM_API KeyFile final
 {
-  _CLASS_OPAQUE_REFCOUNTED(KeyFile, GKeyFile, g_key_file_new, g_key_file_ref, g_key_file_unref)
+  _CLASS_OPAQUE_REFCOUNTED(KeyFile, GKeyFile, g_key_file_new, g_key_file_ref, g_key_file_unref, GLIBMM_API)
   _IGNORE(g_key_file_new, g_key_file_ref, g_key_file_unref, g_key_file_free)
 
 public:
diff --git a/glib/src/markup.hg b/glib/src/markup.hg
index 8e014ba7..b70c2f19 100644
--- a/glib/src/markup.hg
+++ b/glib/src/markup.hg
@@ -63,7 +63,7 @@ namespace Glib
 
 /** %Exception class for markup parsing errors.
  */
-_WRAP_GERROR(MarkupError, GMarkupError, G_MARKUP_ERROR, NO_GTYPE)
+_WRAP_GERROR(MarkupError, GMarkupError, G_MARKUP_ERROR, NO_GTYPE, GLIBMM_API)
 
 /*! @var MarkupError::Code MarkupError::BAD_UTF8
  * Text being parsed was not valid UTF-8.
@@ -107,6 +107,7 @@ using Error = Glib::MarkupError;
  * @param text Some valid UTF-8 text.
  * @return Escaped text.
  */
+GLIBMM_API
 Glib::ustring escape_text(const Glib::ustring& text);
 
 _WRAP_ENUM(ParseFlags, GMarkupParseFlags, NO_GTYPE)
@@ -118,7 +119,7 @@ _WRAP_ENUM(ParseFlags, GMarkupParseFlags, NO_GTYPE)
  * the AttributeKeyLess predicate is locale-independent.  This is both
  * more correct and much more efficient.
  */
-class AttributeKeyLess
+class GLIBMM_API AttributeKeyLess
 {
 public:
   using first_argument_type = Glib::ustring;
@@ -147,7 +148,7 @@ class ParserCallbacks;
  * error from a method, Glib::Markup::ParseContext::parse() will report that
  * error back to its caller.
  */
-class Parser : public sigc::trackable
+class GLIBMM_API Parser : public sigc::trackable
 {
 public:
   typedef std::map<Glib::ustring, Glib::ustring, Glib::Markup::AttributeKeyLess> AttributeMap;
@@ -243,7 +244,7 @@ private:
  * occur; once an error occurs, the parse context can't continue to parse text
  * (you have to destroy it and create a new parse context).
  */
-class ParseContext : public sigc::trackable
+class GLIBMM_API ParseContext : public sigc::trackable
 {
 public:
   /** Creates a new parse context.
diff --git a/glib/src/miscutils.hg b/glib/src/miscutils.hg
index 045ca561..1cba437d 100644
--- a/glib/src/miscutils.hg
+++ b/glib/src/miscutils.hg
@@ -40,6 +40,7 @@ _WRAP_ENUM(FormatSizeFlags, GFormatSizeFlags, NO_GTYPE)
  *
  * @return Human-readable application name. May return <tt>""</tt>.
  */
+GLIBMM_API
 Glib::ustring get_application_name();
 
 /** Sets a human-readable name for the application.
@@ -55,6 +56,7 @@ Glib::ustring get_application_name();
  *
  * @param application_name Localized name of the application.
  */
+GLIBMM_API
 void set_application_name(UStringView application_name);
 
 /** Gets the name of the program.
@@ -68,11 +70,13 @@ void set_application_name(UStringView application_name);
  *
  * @return The name of the program.
  */
+GLIBMM_API
 std::string get_prgname();
 
 /** Sets the name of the program.
  * @param prgname The name of the program.
  */
+GLIBMM_API
 void set_prgname(StdStringView prgname);
 
 /** Returns the value of an environment variable. The name and value
@@ -86,6 +90,7 @@ void set_prgname(StdStringView prgname);
  * @param[out] found Whether the environment variable has been found.
  * @return The value of the environment variable, or <tt>""</tt> if not found.
  */
+GLIBMM_API
 std::string getenv(StdStringView variable, bool& found);
 
 /** Returns the value of an environment variable. The name and value
@@ -98,6 +103,7 @@ std::string getenv(StdStringView variable, bool& found);
  * @param variable The environment variable to get.
  * @return The value of the environment variable, or <tt>""</tt> if not found.
  */
+GLIBMM_API
 std::string getenv(StdStringView variable);
 
 
@@ -114,6 +120,7 @@ std::string getenv(StdStringView variable);
  * @param overwrite Whether to change the variable if it already exists.
  * @result false if the environment variable couldn't be set.
  */
+GLIBMM_API
 bool setenv(StdStringView variable, StdStringView value, bool overwrite = true);
 
 /** Removes an environment variable from the environment.
@@ -125,6 +132,7 @@ bool setenv(StdStringView variable, StdStringView value, bool overwrite = true);
  *
  * @param variable: the environment variable to remove. It  must not contain '='.
  **/
+GLIBMM_API
 void unsetenv(StdStringView variable);
 
 /** Gets the names of all variables set in the environment.
@@ -138,6 +146,7 @@ void unsetenv(StdStringView variable);
  *
  * @return Vector of environment names.
  */
+GLIBMM_API
 std::vector<std::string> listenv();
 
 /** Gets the user name of the current user.
@@ -149,6 +158,7 @@ std::vector<std::string> listenv();
  *
  * @return The name of the current user.
  */
+GLIBMM_API
 std::string get_user_name();
 
 /** Gets the real name of the current user.
@@ -160,6 +170,7 @@ std::string get_user_name();
  *
  * @return The current user's real name.
  */
+GLIBMM_API
 std::string get_real_name();
 
 /** Return a name for the machine. 
@@ -177,11 +188,13 @@ std::string get_real_name();
  *
  * @newin{2,64}
  */
+GLIBMM_API
 Glib::ustring get_host_name();
 
 /** Gets the current user's home directory.
  * @return The current user's home directory or an empty string if not defined.
  */
+GLIBMM_API
 std::string get_home_dir();
 
 /** Gets the directory to use for temporary files.
@@ -190,11 +203,13 @@ std::string get_home_dir();
  * <tt>"/tmp"</tt> is returned on UNIX and <tt>"C:\\"</tt> on Windows.
  * @return The directory to use for temporary files.
  */
+GLIBMM_API
 std::string get_tmp_dir();
 
 /** Gets the current directory.
  * @return The current directory.
  */
+GLIBMM_API
 std::string get_current_dir();
 
 /** Returns the full path of a special directory using its logical id.
@@ -214,6 +229,7 @@ std::string get_current_dir();
  *
  * @newin{2,46}
  */
+GLIBMM_API
 std::string get_user_special_dir(UserDirectory directory);
 
 /** Returns a base directory in which to access application data such as icons
@@ -224,6 +240,7 @@ std::string get_user_special_dir(UserDirectory directory);
  *
  * @newin{2,14}
  */
+GLIBMM_API
 std::string get_user_data_dir();
 
 /** Returns a base directory in which to store user-specific application
@@ -234,6 +251,7 @@ std::string get_user_data_dir();
  *
  * @newin{2,14}
  */
+GLIBMM_API
 std::string get_user_config_dir();
 
 /** Returns an ordered list of base directories in which to access system-wide application data.
@@ -241,6 +259,7 @@ std::string get_user_config_dir();
  *
  * @newin{2,18}
  */
+GLIBMM_API
 std::vector<std::string> get_system_data_dirs();
 
 /** Returns an ordered list of base directories in which to access system-wide configuration information.
@@ -248,6 +267,7 @@ std::vector<std::string> get_system_data_dirs();
  *
  * @newin{2,18}
  */
+GLIBMM_API
 std::vector<std::string> get_system_config_dirs();
 
 /** Returns a base directory in which to store non-essential, cached data
@@ -258,6 +278,7 @@ std::vector<std::string> get_system_config_dirs();
  *
  * @newin{2,14}
  */
+GLIBMM_API
 std::string get_user_cache_dir();
 
 /** Returns a directory that is unique to the current user on the local system.
@@ -268,6 +289,7 @@ std::string get_user_cache_dir();
  *
  * @newin{2,64}
  */
+GLIBMM_API
 std::string get_user_runtime_dir();
 
 /** Returns @c true if the given @a filename is an absolute file name, i.e.\ it
@@ -276,6 +298,7 @@ std::string get_user_runtime_dir();
  * @param filename A file name.
  * @return Whether @a filename is an absolute path.
  */
+GLIBMM_API
 bool path_is_absolute(StdStringView filename);
 
 /** Returns the remaining part of @a filename after the root component,
@@ -284,12 +307,14 @@ bool path_is_absolute(StdStringView filename);
  * @param filename A file name.
  * @return The file name without the root component, or <tt>""</tt>.
  */
+GLIBMM_API
 std::string path_skip_root(StdStringView filename);
 
 /** Gets the name of the file without any leading directory components.
  * @param filename The name of the file.
  * @return The name of the file without any leading directory components.
  */
+GLIBMM_API
 std::string path_get_basename(StdStringView filename);
 
 /** Gets the directory components of a file name.
@@ -297,6 +322,7 @@ std::string path_get_basename(StdStringView filename);
  * @param filename The name of the file.
  * @return The directory components of the file.
  */
+GLIBMM_API
 std::string path_get_dirname(StdStringView filename);
 
 /** Gets the canonical file name from @a filename.
@@ -322,6 +348,7 @@ std::string path_get_dirname(StdStringView filename);
  *
  * @newin{2,64}
  */
+GLIBMM_API
 std::string canonicalize_filename(StdStringView filename, StdStringView relative_to = nullptr);
 
 /** Creates a filename from a series of elements using the correct
@@ -333,6 +360,7 @@ std::string canonicalize_filename(StdStringView filename, StdStringView relative
  * @param elements A vector holding the elements of the path to build.
  * @return The resulting path.
  */
+GLIBMM_API
 std::string build_filename(const std::vector<std::string>&  elements);
 
 /** Creates a filename from one or more elements using the correct separator for filenames.
@@ -382,6 +410,7 @@ std::string build_filename(const Strings&... strings)
  * @param elements A vector holding the elements of the path to build.
  * @return The resulting path.
  */
+GLIBMM_API
 std::string build_path(const std::string& separator,
                        const std::vector<std::string>&  elements);
 
@@ -405,6 +434,7 @@ std::string build_path(const std::string& separator,
  * @param program A program name.
  * @return An absolute path, or <tt>""</tt>.
  */
+GLIBMM_API
 std::string find_program_in_path(StdStringView program);
 
 /** Formats a size (for example the size of a file) into a human readable string.
@@ -422,6 +452,7 @@ std::string find_program_in_path(StdStringView program);
  *
  * @newin{2,46}
  */
+GLIBMM_API
 Glib::ustring format_size(guint64 size, FormatSizeFlags flags = FormatSizeFlags::DEFAULT);
 
 /** @} group MiscUtils */
diff --git a/glib/src/module.hg b/glib/src/module.hg
index 89ddedf9..acc88bec 100644
--- a/glib/src/module.hg
+++ b/glib/src/module.hg
@@ -35,7 +35,7 @@ namespace Glib
  * (e.g. Linux/Sun), as well as HP-UX via its shl_load() mechanism,
  * and Windows platforms via DLLs.
  */
-class Module
+class GLIBMM_API Module
 {
   _CLASS_GENERIC(Module, GModule)
   _IGNORE(g_module_open, g_module_close)
diff --git a/glib/src/optioncontext.hg b/glib/src/optioncontext.hg
index ad696ade..ca0cbd1f 100644
--- a/glib/src/optioncontext.hg
+++ b/glib/src/optioncontext.hg
@@ -31,7 +31,7 @@ namespace Glib
 
 /** Exception class for options.
  */
-_WRAP_GERROR(OptionError, GOptionError, G_OPTION_ERROR, NO_GTYPE)
+_WRAP_GERROR(OptionError, GOptionError, G_OPTION_ERROR, NO_GTYPE, GLIBMM_API)
 
 /** An OptionContext defines and parses commandline options, using OptionGroup%s and \link OptionEntry 
option entries \endlink.
  *
@@ -83,7 +83,7 @@ _WRAP_GERROR(OptionError, GOptionError, G_OPTION_ERROR, NO_GTYPE)
  *
  *
  */
-class OptionContext
+class GLIBMM_API OptionContext
 {
   _CLASS_GENERIC(OptionContext, GOptionContext)
   _IGNORE(g_option_context_free)
diff --git a/glib/src/optionentry.hg b/glib/src/optionentry.hg
index bf9847d7..9e9a4133 100644
--- a/glib/src/optionentry.hg
+++ b/glib/src/optionentry.hg
@@ -38,7 +38,7 @@ namespace Glib
  *
  * The arg_descripton is the placeholder to use for the extra argument parsed by the option in --help  
output.
  */
-class OptionEntry
+class GLIBMM_API OptionEntry
 {
   _CLASS_GENERIC(OptionEntry, GOptionEntry)
 public:
diff --git a/glib/src/optiongroup.hg b/glib/src/optiongroup.hg
index bf690896..aebb03bb 100644
--- a/glib/src/optiongroup.hg
+++ b/glib/src/optiongroup.hg
@@ -51,7 +51,7 @@ class OptionContext;
  * Libraries which need to parse commandline options are expected to provide a function that allows their 
OptionGroups to
  * be added to the application's OptionContext.
  */
-class OptionGroup
+class GLIBMM_API OptionGroup
 {
   _CLASS_GENERIC(OptionGroup, GOptionGroup)
 public:
diff --git a/glib/src/regex.hg b/glib/src/regex.hg
index 2d7c6037..2763e198 100644
--- a/glib/src/regex.hg
+++ b/glib/src/regex.hg
@@ -33,7 +33,7 @@ namespace Glib
 
 /** Exception class for Regex
  */
-_WRAP_GERROR(RegexError, GRegexError, G_REGEX_ERROR, NO_GTYPE)
+_WRAP_GERROR(RegexError, GRegexError, G_REGEX_ERROR, NO_GTYPE, GLIBMM_API)
 
 
 class MatchInfo;
@@ -90,9 +90,9 @@ class MatchInfo;
  *
  * @newin{2,14}
  */
-class Regex final
+class GLIBMM_API Regex final
 {
-  _CLASS_OPAQUE_REFCOUNTED(Regex, GRegex, NONE, g_regex_ref, g_regex_unref)
+  _CLASS_OPAQUE_REFCOUNTED(Regex, GRegex, NONE, g_regex_ref, g_regex_unref, GLIBMM_API)
   _IGNORE(g_regex_ref, g_regex_unref)
 public:
 
@@ -220,7 +220,7 @@ public:
  * expression match which created it.
  * @newin{2,28}
  */
-class MatchInfo
+class GLIBMM_API MatchInfo
 {
   _CLASS_GENERIC(MatchInfo, GMatchInfo)
   _IGNORE(g_match_info_ref, g_match_info_unref, g_match_info_free)
diff --git a/glib/src/shell.hg b/glib/src/shell.hg
index 50736ea8..efb068a1 100644
--- a/glib/src/shell.hg
+++ b/glib/src/shell.hg
@@ -31,7 +31,7 @@ namespace Glib
 
 /** Exception class for shell utility errors.
  */
-_WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE)
+_WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE, GLIBMM_API)
 
 
 /** Parses a command line into an argument vector, in much the same way the
@@ -46,6 +46,7 @@ _WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE)
  * converted to any STL compatible container type).
  * @throw Glib::ShellError
  */
+GLIBMM_API
 std::vector<std::string> shell_parse_argv(const std::string& command_line);
 
 /** Quotes a string so that the shell (/bin/sh) will interpret the quoted
@@ -55,6 +56,7 @@ std::vector<std::string> shell_parse_argv(const std::string& command_line);
  * @param unquoted_string A literal string.
  * @return A quoted string.
  */
+GLIBMM_API
 std::string shell_quote(const std::string& unquoted_string);
 
 /** Unquotes a string as the shell (/bin/sh) would.  Only handles quotes; if
@@ -80,6 +82,7 @@ std::string shell_quote(const std::string& unquoted_string);
  * @return An unquoted string.
  * @throw Glib::ShellError
  */
+GLIBMM_API
 std::string shell_unquote(const std::string& quoted_string);
 
 /** @} group ShellUtils */
diff --git a/glib/src/spawn.hg b/glib/src/spawn.hg
index 63ef5b55..34778a72 100644
--- a/glib/src/spawn.hg
+++ b/glib/src/spawn.hg
@@ -36,7 +36,7 @@ _WRAP_ENUM(SpawnFlags, GSpawnFlags, NO_GTYPE)
 
 /** %Exception class for errors occuring when spawning processes.
  */
-_WRAP_GERROR(SpawnError, GSpawnError, G_SPAWN_ERROR, NO_GTYPE, s#^2BIG$#TOOBIG#)
+_WRAP_GERROR(SpawnError, GSpawnError, G_SPAWN_ERROR, NO_GTYPE, s#^2BIG$#TOOBIG#, GLIBMM_API)
 
 /** For instance,<br>
  *   void on_child_setup();
@@ -191,6 +191,7 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_async_with_pipes(const std::string& working_directory,
                             const std::vector<std::string>& argv,
                             const std::vector<std::string>& envp,
@@ -218,6 +219,7 @@ void spawn_async_with_pipes(const std::string& working_directory,
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_async_with_pipes(const std::string& working_directory,
                             const std::vector<std::string>& argv,
                             SpawnFlags flags = SpawnFlags::DEFAULT,
@@ -248,6 +250,7 @@ void spawn_async_with_pipes(const std::string& working_directory,
  * the message field of returned errors should be displayed
  * to users.
  */
+GLIBMM_API
 void spawn_async(const std::string& working_directory,
                  const std::vector<std::string>& argv,
                  const std::vector<std::string>& envp,
@@ -268,6 +271,7 @@ void spawn_async(const std::string& working_directory,
  * the message field of returned errors should be displayed
  * to users.
  */
+GLIBMM_API
 void spawn_async(const std::string& working_directory,
                  const std::vector<std::string>& argv,
                  SpawnFlags flags = SpawnFlags::DEFAULT,
@@ -306,6 +310,7 @@ void spawn_async(const std::string& working_directory,
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_sync(const std::string& working_directory,
                 const std::vector<std::string>& argv,
                 const std::vector<std::string>& envp,
@@ -331,6 +336,7 @@ void spawn_sync(const std::string& working_directory,
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_sync(const std::string& working_directory,
                 const std::vector<std::string>& argv,
                 SpawnFlags flags = SpawnFlags::DEFAULT,
@@ -356,6 +362,7 @@ void spawn_sync(const std::string& working_directory,
  * to users.
  * @throws ShellError If the command line could not be parsed.
  */
+GLIBMM_API
 void spawn_command_line_async(const std::string& command_line);
 
 /** A simple version of spawn_sync() with little-used parameters
@@ -391,6 +398,7 @@ void spawn_command_line_async(const std::string& command_line);
  * to users.
  * @throws ShellError If the command line could not be parsed.
  */
+GLIBMM_API
 void spawn_command_line_sync(const std::string& command_line,
                              std::string* standard_output = nullptr,
                              std::string* standard_error = nullptr,
@@ -403,6 +411,7 @@ void spawn_command_line_sync(const std::string& command_line,
  *
  * @param pid The process identifier to close.
  */
+GLIBMM_API
 void spawn_close_pid(Pid pid);
 
 /** @} group Spawn */
diff --git a/glib/src/timezone.hg b/glib/src/timezone.hg
index 1d94ba01..ba7101f7 100644
--- a/glib/src/timezone.hg
+++ b/glib/src/timezone.hg
@@ -51,13 +51,13 @@ _WRAP_ENUM(TimeType, GTimeType, NO_GTYPE)
  * changing.
  * @newin{2,30}
  */
-class TimeZone
+class GLIBMM_API TimeZone
 {
   // GTimeZone is refcounted, but Glib::TimeZone is not.
   // GTimeZone is immutable. Therefore, there is no problem having several
   // Glib::TimeZone instances wrap the same GTimeZone, and it's easier to use
   // Glib::TimeZone without Glib::RefPtr.
-  _CLASS_BOXEDTYPE(TimeZone, GTimeZone, NONE, g_time_zone_ref, g_time_zone_unref)
+  _CLASS_BOXEDTYPE(TimeZone, GTimeZone, NONE, g_time_zone_ref, g_time_zone_unref, GLIBMM_API)
   _IGNORE(g_time_zone_ref, g_time_zone_unref)
 
 public:
diff --git a/glib/src/uriutils.hg b/glib/src/uriutils.hg
index 167068b9..ef9102b6 100644
--- a/glib/src/uriutils.hg
+++ b/glib/src/uriutils.hg
@@ -42,6 +42,7 @@ namespace Glib
  * @ingroup UriUtils
  * @newin{2,16}
  */
+GLIBMM_API
 std::string uri_unescape_string(const std::string& escaped_string, const std::string& illegal_characters = 
{});
 
 //TODO: Use iterator?
@@ -61,6 +62,7 @@ std::string uri_unescape_string(const std::string& escaped_string, const std::st
  * @ingroup UriUtils
  * @newin{2,16}
  */
+GLIBMM_API
 std::string uri_parse_scheme(const std::string& uri);
 
 /** Escapes a string for use in a URI.
@@ -80,6 +82,7 @@ std::string uri_parse_scheme(const std::string& uri);
  * @ingroup UriUtils
  * @newin{2,16}
  */
+GLIBMM_API
 std::string uri_escape_string(const std::string& unescaped, const std::string& reserved_chars_allowed = {}, 
bool allow_utf8 = true);
 
 } // namespace Glib
diff --git a/glib/src/value_basictypes.h.m4 b/glib/src/value_basictypes.h.m4
index 40d980e2..342f1e93 100644
--- a/glib/src/value_basictypes.h.m4
+++ b/glib/src/value_basictypes.h.m4
@@ -29,7 +29,7 @@ LINE(]__line__[)dnl
  * @ingroup glibmmValue
  */
 template <>
-class Value<$1> : public ValueBase
+class GLIBMM_API Value<$1> : public ValueBase
 {
 public:
   using CppType = $1;
diff --git a/glib/src/variant.hg b/glib/src/variant.hg
index 114d84c9..095c9339 100644
--- a/glib/src/variant.hg
+++ b/glib/src/variant.hg
@@ -71,7 +71,7 @@ class Bytes;
 // Now (2014-01-30) it's also thrown by Gio::Action::parse_detailed_name().
 /** %Exception class for Variant parse errors.
  */
-_WRAP_GERROR(VariantParseError, GVariantParseError, G_VARIANT_PARSE_ERROR, NO_GTYPE)
+_WRAP_GERROR(VariantParseError, GVariantParseError, G_VARIANT_PARSE_ERROR, NO_GTYPE, GLIBMM_API)
 
 //TODO: Add this documentation from the API if we are confident of it for the C++ wrapper:
 // #GVariant is completely threadsafe.  A #GVariant instance can be
@@ -89,9 +89,9 @@ _WRAP_GERROR(VariantParseError, GVariantParseError, G_VARIANT_PARSE_ERROR, NO_GT
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantBase
+class GLIBMM_API VariantBase
 {
-  _CLASS_OPAQUE_COPYABLE(VariantBase, GVariant, NONE, g_variant_ref_sink, g_variant_unref)
+  _CLASS_OPAQUE_COPYABLE(VariantBase, GVariant, NONE, g_variant_ref_sink, g_variant_unref, GLIBMM_API)
   _CUSTOM_CTOR_CAST()
   _IGNORE(g_variant_ref, g_variant_ref_sink, g_variant_take_ref, g_variant_unref,
     g_variant_get, g_variant_get_va)
@@ -280,7 +280,7 @@ V_CastTo VariantBase::cast_dynamic(const VariantBase& v)
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantStringBase : public VariantBase
+class GLIBMM_API VariantStringBase : public VariantBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(VariantStringBase, GVariant)
@@ -335,7 +335,7 @@ public:
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantContainerBase : public VariantBase
+class GLIBMM_API VariantContainerBase : public VariantBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(VariantContainerBase, GVariant)
@@ -421,7 +421,7 @@ protected:
 };
 
 template<>
-VariantContainerBase VariantBase::cast_dynamic<VariantContainerBase>(const VariantBase& v);
+GLIBMM_API VariantContainerBase VariantBase::cast_dynamic<VariantContainerBase>(const VariantBase& v);
 
 /** Template class used for the specialization of the Variant<> classes.
  * @newin{2,28}
@@ -446,7 +446,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<VariantBase> : public VariantContainerBase
+class GLIBMM_API Variant<VariantBase> : public VariantContainerBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<VariantBase>, GVariant)
@@ -545,7 +545,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<Glib::ustring> : public VariantStringBase
+class GLIBMM_API Variant<Glib::ustring> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<Glib::ustring>, GVariant)
@@ -592,7 +592,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<Glib::DBusObjectPathString> : public VariantStringBase
+class GLIBMM_API Variant<Glib::DBusObjectPathString> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<Glib::DBusObjectPathString>, GVariant)
@@ -638,7 +638,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<Glib::DBusSignatureString> : public VariantStringBase
+class GLIBMM_API Variant<Glib::DBusSignatureString> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<Glib::DBusSignatureString>, GVariant)
@@ -685,7 +685,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<std::string> : public VariantStringBase
+class GLIBMM_API Variant<std::string> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<std::string>, GVariant)
@@ -846,7 +846,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant< std::vector<Glib::ustring> > : public VariantContainerBase
+class GLIBMM_API Variant< std::vector<Glib::ustring> > : public VariantContainerBase
 {
 public:
   using CppType = Glib::ustring                ;
@@ -910,7 +910,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<std::vector<Glib::DBusObjectPathString>> : public VariantContainerBase
+class GLIBMM_API Variant<std::vector<Glib::DBusObjectPathString>> : public VariantContainerBase
 {
 public:
   using CppType = Glib::DBusObjectPathString;
@@ -972,7 +972,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant< std::vector<std::string> > : public VariantContainerBase
+class GLIBMM_API Variant< std::vector<std::string> > : public VariantContainerBase
 {
 public:
   using CppType = std::string                  ;
@@ -1593,7 +1593,7 @@ VariantIter Variant<std::tuple<Types...>>::get_iter() const
 // This is needed so Glib::VariantBase can be used with
 // Glib::Value and _WRAP_PROPERTY in Gio::Action and elsewhere.
 template <>
-class Value<Glib::VariantBase> : public ValueBase_Variant
+class GLIBMM_API Value<Glib::VariantBase> : public ValueBase_Variant
 {
 public:
   using CppType = Glib::VariantBase;
diff --git a/glib/src/variant_basictypes.h.m4 b/glib/src/variant_basictypes.h.m4
index 54151771..199295b9 100644
--- a/glib/src/variant_basictypes.h.m4
+++ b/glib/src/variant_basictypes.h.m4
@@ -39,7 +39,7 @@ LINE(]__line__[)dnl
  * @ingroup Variant
  */
 template <>
-class Variant<$1> : public VariantBase
+class GLIBMM_API Variant<$1> : public VariantBase
 {
 public:
   using CType = $2;
diff --git a/glib/src/variantdict.hg b/glib/src/variantdict.hg
index 1f9a5a16..4b69a085 100644
--- a/glib/src/variantdict.hg
+++ b/glib/src/variantdict.hg
@@ -32,11 +32,11 @@ namespace Glib
  *
  * newin{2,40}
  */
-class VariantDict final
+class GLIBMM_API VariantDict final
 {
   //GVariantDict is registered as a boxed type, but it has ref/unref functions instead of copy/free,
   //so we use it via RefPtr.
-  _CLASS_OPAQUE_REFCOUNTED(VariantDict, GVariantDict, NONE, g_variant_dict_ref, g_variant_dict_unref)
+  _CLASS_OPAQUE_REFCOUNTED(VariantDict, GVariantDict, NONE, g_variant_dict_ref, g_variant_dict_unref, 
GLIBMM_API)
   _IGNORE(g_variant_dict_ref, g_variant_dict_unref, g_variant_dict_init)
 
 public:
diff --git a/glib/src/variantiter.hg b/glib/src/variantiter.hg
index c81dc29a..ede976e6 100644
--- a/glib/src/variantiter.hg
+++ b/glib/src/variantiter.hg
@@ -20,8 +20,8 @@ _DEFS(glibmm,glib)
 namespace Glib
 {
 
-class VariantBase;
-class VariantContainerBase;
+class GLIBMM_API VariantBase;
+class GLIBMM_API VariantContainerBase;
 
 //This can't be like a real iterator (like Gtk::TextIter),
 //because g_iter_value_get_next_value() both gets a value and changes the iterator.
@@ -30,9 +30,9 @@ class VariantContainerBase;
  * VariantContainerBase containers such as arrays.
  * @newin{2,28}
  */
-class VariantIter
+class GLIBMM_API VariantIter
 {
-  _CLASS_OPAQUE_COPYABLE(VariantIter, GVariantIter, NONE, g_variant_iter_copy, g_variant_iter_free)
+  _CLASS_OPAQUE_COPYABLE(VariantIter, GVariantIter, NONE, g_variant_iter_copy, g_variant_iter_free, 
GLIBMM_API)
   _IGNORE(g_variant_iter_copy, g_variant_iter_free)
 public:
   explicit VariantIter(const VariantContainerBase& variant);
diff --git a/glib/src/varianttype.hg b/glib/src/varianttype.hg
index 50ddac16..870be3d9 100644
--- a/glib/src/varianttype.hg
+++ b/glib/src/varianttype.hg
@@ -88,9 +88,9 @@ namespace Glib
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantType
+class GLIBMM_API VariantType
 {
-  _CLASS_OPAQUE_COPYABLE(VariantType, GVariantType, NONE, g_variant_type_copy, g_variant_type_free)
+  _CLASS_OPAQUE_COPYABLE(VariantType, GVariantType, NONE, g_variant_type_copy, g_variant_type_free, 
GLIBMM_API)
   _IGNORE(g_variant_type_copy, g_variant_type_free)
 public:
 
@@ -191,63 +191,63 @@ public:
   _IGNORE(g_variant_type_info_get)
 };
 
-extern const VariantType VARIANT_TYPE_BOOL;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BOOL;
 
-extern const VariantType VARIANT_TYPE_BYTE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BYTE;
 
-extern const VariantType VARIANT_TYPE_INT16;
+extern GLIBMM_API const VariantType VARIANT_TYPE_INT16;
 
-extern const VariantType VARIANT_TYPE_UINT16;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UINT16;
 
-extern const VariantType VARIANT_TYPE_INT32;
+extern GLIBMM_API const VariantType VARIANT_TYPE_INT32;
 
-extern const VariantType VARIANT_TYPE_UINT32;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UINT32;
 
-extern const VariantType VARIANT_TYPE_INT64;
+extern GLIBMM_API const VariantType VARIANT_TYPE_INT64;
 
-extern const VariantType VARIANT_TYPE_UINT64;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UINT64;
 
-extern const VariantType VARIANT_TYPE_DOUBLE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_DOUBLE;
 
-extern const VariantType VARIANT_TYPE_STRING;
+extern GLIBMM_API const VariantType VARIANT_TYPE_STRING;
 
-extern const VariantType VARIANT_TYPE_OBJECT_PATH;
+extern GLIBMM_API const VariantType VARIANT_TYPE_OBJECT_PATH;
 
-extern const VariantType VARIANT_TYPE_SIGNATURE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_SIGNATURE;
 
-extern const VariantType VARIANT_TYPE_VARIANT;
+extern GLIBMM_API const VariantType VARIANT_TYPE_VARIANT;
 
-extern const VariantType VARIANT_TYPE_HANDLE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_HANDLE;
 
-extern const VariantType VARIANT_TYPE_UNIT;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UNIT;
 
-extern const VariantType VARIANT_TYPE_ANY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_ANY;
 
-extern const VariantType VARIANT_TYPE_BASIC;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BASIC;
 
-extern const VariantType VARIANT_TYPE_MAYBE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_MAYBE;
 
-extern const VariantType VARIANT_TYPE_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_ARRAY;
 
-extern const VariantType VARIANT_TYPE_TUPLE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_TUPLE;
 
-extern const VariantType VARIANT_TYPE_DICT_ENTRY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_DICT_ENTRY;
 
-extern const VariantType VARIANT_TYPE_DICTIONARY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_DICTIONARY;
 
-extern const VariantType VARIANT_TYPE_STRING_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_STRING_ARRAY;
 
-extern const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY;
 
-extern const VariantType VARIANT_TYPE_BYTESTRING;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BYTESTRING;
 
-extern const VariantType VARIANT_TYPE_BYTESTRING_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BYTESTRING_ARRAY;
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 // This is needed so Glib::VariantType can be used with
 // Glib::Value and _WRAP_PROPERTY in Gio::Action and elsewhere.
 template <>
-class Value<Glib::VariantType> : public ValueBase_Boxed
+class GLIBMM_API Value<Glib::VariantType> : public ValueBase_Boxed
 {
 public:
   using CppType = Glib::VariantType;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]