Fix MSVC warning needs to have dll-interface (#1185)

Unfortunately, MSVC exports everything (not only public members) when
__declspec(dllexport) is set at the class level via TAGLIB_EXPORT, which
leads to many "needs to have dll-interface to be used by clients" 4251
warnings issued by MSVC, because the std::unique_ptr pimpls are
exported too. As it is not possible to "unexport" private members,
such a warning has to be explicitly suppressed for these cases or
all public and protected class member now have to be exported
for classes derived from a template (StringList, ByteVectorList,
PropertyMap).
This commit is contained in:
Urs Fleisch
2023-12-10 17:03:40 +01:00
parent ec734bbe08
commit c9486731d9
104 changed files with 170 additions and 10 deletions

View File

@ -160,6 +160,7 @@ namespace TagLib {
ByteVector xiphCommentData();
class FilePrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<FilePrivate> d;
};
} // namespace FLAC

View File

@ -118,6 +118,7 @@ namespace TagLib {
void writePacket(unsigned int i, const ByteVector &packet);
class FilePrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<FilePrivate> d;
};

View File

@ -211,6 +211,7 @@ namespace TagLib {
private:
class PagePrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<PagePrivate> d;
};
} // namespace Ogg

View File

@ -223,6 +223,7 @@ namespace TagLib {
ByteVector lacingValues() const;
class PageHeaderPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<PageHeaderPrivate> d;
};

View File

@ -128,6 +128,7 @@ namespace TagLib {
void read(bool readProperties);
class FilePrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<FilePrivate> d;
};
} // namespace Opus

View File

@ -105,6 +105,7 @@ namespace TagLib {
void read(File *file);
class PropertiesPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<PropertiesPrivate> d;
};
} // namespace Opus

View File

@ -128,6 +128,7 @@ namespace TagLib {
void read(bool readProperties);
class FilePrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<FilePrivate> d;
};
} // namespace Speex

View File

@ -100,6 +100,7 @@ namespace TagLib {
void read(File *file);
class PropertiesPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<PropertiesPrivate> d;
};
} // namespace Speex

View File

@ -137,6 +137,7 @@ namespace TagLib {
void read(bool readProperties);
class FilePrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<FilePrivate> d;
};
} // namespace Vorbis

View File

@ -121,6 +121,7 @@ namespace TagLib {
void read(File *file);
class PropertiesPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<PropertiesPrivate> d;
};
} // namespace Vorbis

View File

@ -262,6 +262,7 @@ namespace TagLib {
private:
class XiphCommentPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<XiphCommentPrivate> d;
};
} // namespace Ogg