summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/source/inc/CommonFunctors.hxx8
-rw-r--r--chart2/source/inc/PropertyHelper.hxx2
-rw-r--r--compilerplugins/clang/dllmacro.cxx112
-rw-r--r--compilerplugins/clang/dllprivate.cxx79
-rw-r--r--connectivity/source/inc/RowFunctionParser.hxx2
-rw-r--r--desktop/source/deployment/inc/dp_ucb.h2
-rw-r--r--include/basegfx/color/bcolor.hxx2
-rw-r--r--include/basegfx/matrix/b2dhommatrixtools.hxx2
-rw-r--r--include/basegfx/numeric/ftools.hxx2
-rw-r--r--include/basegfx/pixel/bpixel.hxx2
-rw-r--r--include/comphelper/propertycontainerhelper.hxx2
-rw-r--r--include/connectivity/FValue.hxx4
-rw-r--r--include/filter/msfilter/dffrecordheader.hxx2
-rw-r--r--include/filter/msfilter/mscodec.hxx4
-rw-r--r--include/filter/msfilter/svdfppt.hxx2
-rw-r--r--include/filter/msfilter/util.hxx2
-rw-r--r--include/svx/transfrmhelper.hxx2
-rw-r--r--include/svx/xmlexchg.hxx2
-rw-r--r--include/tools/svborder.hxx2
-rw-r--r--include/vcl/bitmap.hxx2
-rw-r--r--include/vcl/commandevent.hxx8
-rw-r--r--include/vcl/pointr.hxx2
-rw-r--r--sc/inc/colorscale.hxx2
-rw-r--r--sw/inc/ndindex.hxx2
-rw-r--r--sw/source/filter/inc/fltshell.hxx2
-rw-r--r--vcl/inc/headless/svpgdi.hxx2
26 files changed, 111 insertions, 144 deletions
diff --git a/chart2/source/inc/CommonFunctors.hxx b/chart2/source/inc/CommonFunctors.hxx
index e8cdb12d6ba1..8b11df32f3ea 100644
--- a/chart2/source/inc/CommonFunctors.hxx
+++ b/chart2/source/inc/CommonFunctors.hxx
@@ -50,7 +50,7 @@ template< typename T >
<p>In case no number can be generated from the Any, NaN (see
rtl::math::SetNAN()) is returned.</p>
*/
-struct AnyToDouble
+struct OOO_DLLPUBLIC_CHARTTOOLS AnyToDouble
{
double operator() ( const css::uno::Any & rAny )
{
@@ -64,7 +64,7 @@ struct AnyToDouble
/** unary function to convert css::uno::Any into an
OUString.
*/
-struct AnyToString
+struct OOO_DLLPUBLIC_CHARTTOOLS AnyToString
{
OUString operator() ( const css::uno::Any & rAny )
{
@@ -93,7 +93,7 @@ struct AnyToString
<p>For conversion rtl::math::StringToDouble is used.</p>
*/
-struct OUStringToDouble
+struct OOO_DLLPUBLIC_CHARTTOOLS OUStringToDouble
{
double operator() ( const OUString & rStr )
{
@@ -111,7 +111,7 @@ struct OUStringToDouble
<p>For conversion rtl::math::DoubleToOUString is used.</p>
*/
-struct DoubleToOUString
+struct OOO_DLLPUBLIC_CHARTTOOLS DoubleToOUString
{
OUString operator() ( double fNumber )
{
diff --git a/chart2/source/inc/PropertyHelper.hxx b/chart2/source/inc/PropertyHelper.hxx
index 4051d00f9e78..52a38edfed6c 100644
--- a/chart2/source/inc/PropertyHelper.hxx
+++ b/chart2/source/inc/PropertyHelper.hxx
@@ -138,7 +138,7 @@ OOO_DLLPUBLIC_CHARTTOOLS void setEmptyPropertyValueDefault( tPropertyValueMap &
} // namespace PropertyHelper
-struct PropertyNameLess
+struct OOO_DLLPUBLIC_CHARTTOOLS PropertyNameLess
{
bool operator() ( const css::beans::Property & first,
const css::beans::Property & second )
diff --git a/compilerplugins/clang/dllmacro.cxx b/compilerplugins/clang/dllmacro.cxx
deleted file mode 100644
index 66664888419c..000000000000
--- a/compilerplugins/clang/dllmacro.cxx
+++ /dev/null
@@ -1,112 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "plugin.hxx"
-#include <iostream>
-#include <fstream>
-
-/**
- Check the usage of the various DLL visibility macros.
- */
-class DllMacro final:
- public RecursiveASTVisitor<DllMacro>, public loplugin::Plugin
-{
-public:
- explicit DllMacro(InstantiationData const & data): Plugin(data) {}
-
- bool VisitNamedDecl(NamedDecl const * decl);
-
-private:
- void run() override {
- // DISABLE_DYNLOADING makes SAL_DLLPUBLIC_{EXPORT,IMPORT,TEMPLATE} expand
- // to visibility("hidden") attributes, which would cause bogus warnings
- // here (e.g., in UBSan builds that explicitly define DISABLE_DYNLOADING
- // in jurt/source/pipe/staticsalhack.cxx); alternatively, change
- // include/sal/types.h to make those SAL_DLLPUBLIC_* expand to nothing
- // for DISABLE_DYNLOADING:
- if (!compiler.getPreprocessor().getIdentifierInfo("DISABLE_DYNLOADING")
- ->hasMacroDefinition())
- {
- TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
- }
- }
-};
-
-bool DllMacro::VisitNamedDecl(NamedDecl const * decl) {
- if (!decl->getLocation().isInvalid() && ignoreLocation(decl)) {
- return true;
- }
- auto a = decl->getAttr<VisibilityAttr>();
- if (a == nullptr) {
- return true;
- }
- if (compiler.getSourceManager().isMacroBodyExpansion(
- decl->getLocation())
- && (Lexer::getImmediateMacroName(
- decl->getLocation(), compiler.getSourceManager(),
- compiler.getLangOpts())
- == "Q_OBJECT")) // from /usr/include/QtCore/qobjectdefs.h
- {
- return true;
- }
- if (a->getVisibility() == VisibilityAttr::Hidden) {
- auto p = dyn_cast<RecordDecl>(decl->getDeclContext());
- if (p == nullptr) {
- report(
- DiagnosticsEngine::Warning,
- "top-level declaration redundantly marked as DLLPRIVATE",
- a->getLocation())
- << decl->getSourceRange();
- } else if (p->getVisibility() == HiddenVisibility) {
- report(
- DiagnosticsEngine::Warning,
- ("declaration nested in DLLPRIVATE declaration redundantly"
- " marked as DLLPRIVATE"),
- a->getLocation())
- << decl->getSourceRange();
- report(
- DiagnosticsEngine::Note, "parent declaration is here",
- p->getLocation())
- << p->getSourceRange();
- }
- }
- else if (a->getVisibility() == VisibilityAttr::Default && !a->isInherited())
- {
- auto p = dyn_cast<CXXRecordDecl>(decl);
- if (p && p->isCompleteDefinition() && !p->getDescribedClassTemplate()) {
- // don't know what these macros mean, leave them alone
- auto macroLoc = a->getLocation();
- while (compiler.getSourceManager().isMacroBodyExpansion(macroLoc)) {
- auto macroName = Lexer::getImmediateMacroName(
- macroLoc, compiler.getSourceManager(),
- compiler.getLangOpts());
- if (macroName == "SAL_EXCEPTION_DLLPUBLIC_EXPORT")
- return true;
- if (macroName == "VCL_PLUGIN_PUBLIC")
- return true;
- macroLoc = compiler.getSourceManager().getImmediateMacroCallerLoc(macroLoc);
- }
- for (auto it = p->method_begin(); it != p->method_end(); ++it) {
- if (!it->hasInlineBody()) {
- return true;
- }
- }
- report(
- DiagnosticsEngine::Warning,
- "unnecessary *DLLPUBLIC declaration for class completely defined in header file",
- a->getLocation())
- << decl->getSourceRange();
- }
- }
- return true;
-}
-
-static loplugin::Plugin::Registration<DllMacro> reg("dllmacro");
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/compilerplugins/clang/dllprivate.cxx b/compilerplugins/clang/dllprivate.cxx
new file mode 100644
index 000000000000..05cf26d7d5d2
--- /dev/null
+++ b/compilerplugins/clang/dllprivate.cxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "plugin.hxx"
+
+namespace {
+
+class Visitor final:
+ public RecursiveASTVisitor<Visitor>, public loplugin::Plugin
+{
+public:
+ explicit Visitor(InstantiationData const & data): Plugin(data) {}
+
+ bool VisitNamedDecl(NamedDecl const * decl) {
+ if (!decl->getLocation().isInvalid()&&ignoreLocation(decl)) {
+ return true;
+ }
+ auto a = decl->getAttr<VisibilityAttr>();
+ if (a == nullptr || a->getVisibility() != VisibilityAttr::Hidden) {
+ return true;
+ }
+ if (compiler.getSourceManager().isMacroBodyExpansion(
+ decl->getLocation())
+ && (Lexer::getImmediateMacroName(
+ decl->getLocation(), compiler.getSourceManager(),
+ compiler.getLangOpts())
+ == "Q_OBJECT")) // from /usr/include/QtCore/qobjectdefs.h
+ {
+ return true;
+ }
+ auto p = dyn_cast<RecordDecl>(decl->getDeclContext());
+ if (p == nullptr) {
+ report(
+ DiagnosticsEngine::Warning,
+ "top-level declaration redundantly marked as DLLPRIVATE",
+ a->getLocation())
+ << decl->getSourceRange();
+ } else if (p->getVisibility() == HiddenVisibility) {
+ report(
+ DiagnosticsEngine::Warning,
+ ("declaration nested in DLLPRIVATE declaration redundantly"
+ " marked as DLLPRIVATE"),
+ a->getLocation())
+ << decl->getSourceRange();
+ report(
+ DiagnosticsEngine::Note, "parent declaration is here",
+ p->getLocation())
+ << p->getSourceRange();
+ }
+ return true;
+ }
+
+private:
+ void run() override {
+ // DISABLE_DYNLOADING makes SAL_DLLPUBLIC_{EXPORT,IMPORT,TEMPLATE} expand
+ // to visibility("hidden") attributes, which would cause bogus warnings
+ // here (e.g., in UBSan builds that explicitly define DISABLE_DYNLOADING
+ // in jurt/source/pipe/staticsalhack.cxx); alternatively, change
+ // include/sal/types.h to make those SAL_DLLPUBLIC_* expand to nothing
+ // for DISABLE_DYNLOADING:
+ if (!compiler.getPreprocessor().getIdentifierInfo("DISABLE_DYNLOADING")
+ ->hasMacroDefinition())
+ {
+ TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
+ }
+ }
+};
+
+static loplugin::Plugin::Registration<Visitor> reg("dllprivate");
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/inc/RowFunctionParser.hxx b/connectivity/source/inc/RowFunctionParser.hxx
index 5c494728a9f5..df2c7ba2bf4e 100644
--- a/connectivity/source/inc/RowFunctionParser.hxx
+++ b/connectivity/source/inc/RowFunctionParser.hxx
@@ -55,7 +55,7 @@ public:
/** This exception is thrown, when the arithmetic expression
parser failed to parse a string.
*/
-struct ParseError
+struct OOO_DLLPUBLIC_DBTOOLS ParseError
{
ParseError( const char* ) {}
};
diff --git a/desktop/source/deployment/inc/dp_ucb.h b/desktop/source/deployment/inc/dp_ucb.h
index 19b6e1b9702b..3c97fc6a1e89 100644
--- a/desktop/source/deployment/inc/dp_ucb.h
+++ b/desktop/source/deployment/inc/dp_ucb.h
@@ -36,7 +36,7 @@ class Content;
namespace dp_misc {
-struct StrTitle
+struct DESKTOP_DEPLOYMENTMISC_DLLPUBLIC StrTitle
{
static css::uno::Sequence< OUString > getTitleSequence()
{
diff --git a/include/basegfx/color/bcolor.hxx b/include/basegfx/color/bcolor.hxx
index c612a5d6dfd8..300f8db81e81 100644
--- a/include/basegfx/color/bcolor.hxx
+++ b/include/basegfx/color/bcolor.hxx
@@ -42,7 +42,7 @@ namespace basegfx
@see B3DTuple
*/
- class SAL_WARN_UNUSED BColor : public B3DTuple
+ class SAL_WARN_UNUSED BASEGFX_DLLPUBLIC BColor : public B3DTuple
{
public:
/** Create a Color with red, green and blue components from [0.0 to 1.0]
diff --git a/include/basegfx/matrix/b2dhommatrixtools.hxx b/include/basegfx/matrix/b2dhommatrixtools.hxx
index f0559fdf8f11..c60a6ac96c21 100644
--- a/include/basegfx/matrix/b2dhommatrixtools.hxx
+++ b/include/basegfx/matrix/b2dhommatrixtools.hxx
@@ -148,7 +148,7 @@ namespace basegfx
{
namespace utils
{
- class B2DHomMatrixBufferedDecompose
+ class BASEGFX_DLLPUBLIC B2DHomMatrixBufferedDecompose
{
private:
B2DVector maScale;
diff --git a/include/basegfx/numeric/ftools.hxx b/include/basegfx/numeric/ftools.hxx
index cf7a05316bc7..35a1a35111b2 100644
--- a/include/basegfx/numeric/ftools.hxx
+++ b/include/basegfx/numeric/ftools.hxx
@@ -148,7 +148,7 @@ namespace basegfx
*/
BASEGFX_DLLPUBLIC double snapToNearestMultiple(double v, const double fStep);
- class fTools
+ class BASEGFX_DLLPUBLIC fTools
{
public:
/// Get threshold value for equalZero and friends
diff --git a/include/basegfx/pixel/bpixel.hxx b/include/basegfx/pixel/bpixel.hxx
index 7eee516c2cff..ed1dadc06a09 100644
--- a/include/basegfx/pixel/bpixel.hxx
+++ b/include/basegfx/pixel/bpixel.hxx
@@ -27,7 +27,7 @@
namespace basegfx
{
- class BPixel
+ class BASEGFX_DLLPUBLIC BPixel
{
protected:
union
diff --git a/include/comphelper/propertycontainerhelper.hxx b/include/comphelper/propertycontainerhelper.hxx
index 23f9757e0336..513aa88f4993 100644
--- a/include/comphelper/propertycontainerhelper.hxx
+++ b/include/comphelper/propertycontainerhelper.hxx
@@ -32,7 +32,7 @@ namespace comphelper
// infos about one single property
-struct PropertyDescription
+struct COMPHELPER_DLLPUBLIC PropertyDescription
{
// the possibilities where a property holding object may be located
enum class LocationType
diff --git a/include/connectivity/FValue.hxx b/include/connectivity/FValue.hxx
index 9fa8d09199e6..d2fbfd47e9ba 100644
--- a/include/connectivity/FValue.hxx
+++ b/include/connectivity/FValue.hxx
@@ -472,7 +472,7 @@ namespace connectivity
/// TSetBound is a functor to set the bound value with e.q. for_each call
- struct TSetBound
+ struct OOO_DLLPUBLIC_DBTOOLS TSetBound
{
bool m_bBound;
TSetBound(bool _bBound) : m_bBound(_bBound){}
@@ -482,7 +482,7 @@ namespace connectivity
/// TSetBound is a functor to set the bound value with e.q. for_each call
- struct TSetRefBound
+ struct OOO_DLLPUBLIC_DBTOOLS TSetRefBound
{
bool m_bBound;
TSetRefBound(bool _bBound) : m_bBound(_bBound){}
diff --git a/include/filter/msfilter/dffrecordheader.hxx b/include/filter/msfilter/dffrecordheader.hxx
index cddc2e3d2447..acd0d2539889 100644
--- a/include/filter/msfilter/dffrecordheader.hxx
+++ b/include/filter/msfilter/dffrecordheader.hxx
@@ -26,7 +26,7 @@
#include <tools/solar.h>
#include <tools/stream.hxx>
-class DffRecordHeader
+class MSFILTER_DLLPUBLIC DffRecordHeader
{
public:
sal_uInt8 nRecVer; // may be DFF_PSFLAG_CONTAINER
diff --git a/include/filter/msfilter/mscodec.hxx b/include/filter/msfilter/mscodec.hxx
index 8a409800407a..b0ab818449ae 100644
--- a/include/filter/msfilter/mscodec.hxx
+++ b/include/filter/msfilter/mscodec.hxx
@@ -476,13 +476,13 @@ struct MSFILTER_DLLPUBLIC EncryptionVerifierRC4
EncryptionVerifierRC4();
};
-struct StandardEncryptionInfo
+struct MSFILTER_DLLPUBLIC StandardEncryptionInfo
{
EncryptionStandardHeader header;
EncryptionVerifierAES verifier;
};
-struct RC4EncryptionInfo
+struct MSFILTER_DLLPUBLIC RC4EncryptionInfo
{
EncryptionStandardHeader header;
EncryptionVerifierRC4 verifier;
diff --git a/include/filter/msfilter/svdfppt.hxx b/include/filter/msfilter/svdfppt.hxx
index 2895b98fbf0b..2be1cd00dbb0 100644
--- a/include/filter/msfilter/svdfppt.hxx
+++ b/include/filter/msfilter/svdfppt.hxx
@@ -117,7 +117,7 @@ struct SdHyperlinkEntry
};
// Helper class for reading the PPT InteractiveInfoAtom
-struct PptInteractiveInfoAtom
+struct MSFILTER_DLLPUBLIC PptInteractiveInfoAtom
{
sal_uInt32 nSoundRef;
sal_uInt32 nExHyperlinkId;
diff --git a/include/filter/msfilter/util.hxx b/include/filter/msfilter/util.hxx
index 1d3bae385677..8aa01f5be952 100644
--- a/include/filter/msfilter/util.hxx
+++ b/include/filter/msfilter/util.hxx
@@ -70,7 +70,7 @@ MSFILTER_DLLPUBLIC OString ConvertColor( const Color &rColor, bool bAutoColor =
/** Paper size in 1/100 millimeters. */
-struct ApiPaperSize
+struct MSFILTER_DLLPUBLIC ApiPaperSize
{
sal_Int32 mnWidth;
sal_Int32 mnHeight;
diff --git a/include/svx/transfrmhelper.hxx b/include/svx/transfrmhelper.hxx
index 481814b298c5..d5f293dbc10a 100644
--- a/include/svx/transfrmhelper.hxx
+++ b/include/svx/transfrmhelper.hxx
@@ -24,7 +24,7 @@
#include <tools/fldunit.hxx>
#include <tools/mapunit.hxx>
-class TransfrmHelper
+class SVX_DLLPUBLIC TransfrmHelper
{
public:
static void ConvertRect(basegfx::B2DRange& rRange, const sal_uInt16 nDigits, const MapUnit ePoolUnit, const FieldUnit eDlgUnit)
diff --git a/include/svx/xmlexchg.hxx b/include/svx/xmlexchg.hxx
index 044422e15406..6d2c0bfc1bae 100644
--- a/include/svx/xmlexchg.hxx
+++ b/include/svx/xmlexchg.hxx
@@ -42,7 +42,7 @@ namespace svx
//= OXFormsDescriptor
- struct OXFormsDescriptor {
+ struct SVX_DLLPUBLIC OXFormsDescriptor {
OUString szName;
OUString szServiceName;
diff --git a/include/tools/svborder.hxx b/include/tools/svborder.hxx
index e1fa1b5356b1..9eef88819847 100644
--- a/include/tools/svborder.hxx
+++ b/include/tools/svborder.hxx
@@ -23,7 +23,7 @@
#include <tools/toolsdllapi.h>
#include <tools/gen.hxx>
-class SAL_WARN_UNUSED SvBorder
+class SAL_WARN_UNUSED TOOLS_DLLPUBLIC SvBorder
{
long nTop, nRight, nBottom, nLeft;
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index 904530b3e5f0..0be13c12bf3e 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -110,7 +110,7 @@ enum class BmpFilter
Unknown = 65535
};
-class BmpFilterParam
+class VCL_DLLPUBLIC BmpFilterParam
{
public:
diff --git a/include/vcl/commandevent.hxx b/include/vcl/commandevent.hxx
index 464734fe4f94..778348b3d1a3 100644
--- a/include/vcl/commandevent.hxx
+++ b/include/vcl/commandevent.hxx
@@ -206,7 +206,7 @@ enum class ShowDialogId
About = 2,
};
-class CommandDialogData
+class VCL_DLLPUBLIC CommandDialogData
{
ShowDialogId m_nDialogId;
public:
@@ -242,7 +242,7 @@ enum class MediaCommand
NextTrackHold = 21,// Button Right holding pressed.
};
-class CommandMediaData
+class VCL_DLLPUBLIC CommandMediaData
{
MediaCommand m_nMediaId;
bool m_bPassThroughToOS;
@@ -270,7 +270,7 @@ public:
sal_uLong GetEnd() const { return mnEnd; }
};
-class CommandSwipeData
+class VCL_DLLPUBLIC CommandSwipeData
{
double mnVelocityX;
public:
@@ -286,7 +286,7 @@ public:
};
-class CommandLongPressData
+class VCL_DLLPUBLIC CommandLongPressData
{
double mnX;
double mnY;
diff --git a/include/vcl/pointr.hxx b/include/vcl/pointr.hxx
index 405a5a875e38..8370b9f9d296 100644
--- a/include/vcl/pointr.hxx
+++ b/include/vcl/pointr.hxx
@@ -23,7 +23,7 @@
#include <vcl/dllapi.h>
#include <vcl/ptrstyle.hxx>
-class Pointer
+class VCL_DLLPUBLIC Pointer
{
PointerStyle meStyle;
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx
index 2a2004e5673b..0d33f1bb7146 100644
--- a/sc/inc/colorscale.hxx
+++ b/sc/inc/colorscale.hxx
@@ -91,7 +91,7 @@ enum ScAxisPosition
}
-struct ScDataBarFormatData
+struct SC_DLLPUBLIC ScDataBarFormatData
{
ScDataBarFormatData():
maAxisColor(COL_BLACK),
diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx
index 494ebb85e017..51c716d85a5a 100644
--- a/sw/inc/ndindex.hxx
+++ b/sw/inc/ndindex.hxx
@@ -129,7 +129,7 @@ inline std::ostream &operator <<(std::ostream& s, const SwNodeIndex& index)
// SwRange
-class SwNodeRange
+class SW_DLLPUBLIC SwNodeRange
{
public:
SwNodeIndex aStart;
diff --git a/sw/source/filter/inc/fltshell.hxx b/sw/source/filter/inc/fltshell.hxx
index c021f8514c9f..34f1ab8862dc 100644
--- a/sw/source/filter/inc/fltshell.hxx
+++ b/sw/source/filter/inc/fltshell.hxx
@@ -47,7 +47,7 @@ inline bool SwFltGetFlag(sal_uLong nFieldFlags, int no)
//Subvert the Node/Content system to get positions which don't update as
//content is appended to them
-struct SwFltPosition
+struct SW_DLLPUBLIC SwFltPosition
{
public:
SwNodeIndex m_nNode;
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx
index 7130d1153d6b..5879c1bfdf44 100644
--- a/vcl/inc/headless/svpgdi.hxx
+++ b/vcl/inc/headless/svpgdi.hxx
@@ -71,7 +71,7 @@ typedef void (*damageHandler)(void* handle,
sal_Int32 nExtentsX, sal_Int32 nExtentsY,
sal_Int32 nExtentsWidth, sal_Int32 nExtentsHeight);
-struct DamageHandler
+struct VCL_DLLPUBLIC DamageHandler
{
void *handle;
damageHandler damaged;