diff -Naur a/OpenEXR/IlmImf/ImfGenericInputFile.h b/OpenEXR/IlmImf/ImfGenericInputFile.h
--- a/OpenEXR/IlmImf/ImfGenericInputFile.h	2018-11-04 22:55:11.645972400 +0300
+++ b/OpenEXR/IlmImf/ImfGenericInputFile.h	2018-11-04 22:55:48.038053900 +0300
@@ -42,16 +42,13 @@
 
 OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
 
-class GenericInputFile
+class IMF_EXPORT GenericInputFile
 {
     public:
-        IMF_EXPORT
         virtual ~GenericInputFile();
 
     protected:
-        IMF_EXPORT
         GenericInputFile();
-        IMF_EXPORT
         void readMagicNumberAndVersionField(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int& version);
 };
 
diff -Naur a/OpenEXR/IlmImf/ImfGenericOutputFile.h b/OpenEXR/IlmImf/ImfGenericOutputFile.h
--- a/OpenEXR/IlmImf/ImfGenericOutputFile.h	2018-11-04 22:55:07.805752800 +0300
+++ b/OpenEXR/IlmImf/ImfGenericOutputFile.h	2018-11-04 22:56:00.851786800 +0300
@@ -45,18 +45,14 @@
 OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
 
 
-class GenericOutputFile
+class IMF_EXPORT GenericOutputFile
 {
     public:
-        IMF_EXPORT
         virtual ~GenericOutputFile();
 
     protected:
-        IMF_EXPORT
         GenericOutputFile();
-        IMF_EXPORT
         void writeMagicNumberAndVersionField (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, const Header& header);
-        IMF_EXPORT
         void writeMagicNumberAndVersionField (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, const Header * headers, int parts);
   
 };
diff -Naur a/OpenEXR/IlmImf/ImfName.h b/OpenEXR/IlmImf/ImfName.h
--- a/OpenEXR/IlmImf/ImfName.h	2018-08-10 04:34:58.000000000 +0300
+++ b/OpenEXR/IlmImf/ImfName.h	2018-11-04 22:52:03.670220800 +0300
@@ -51,7 +51,7 @@
 OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
 
 
-class Name
+class IMF_EXPORT Name
 {
   public:
 
@@ -59,9 +59,7 @@
     // Constructors
     //-------------
 
-    IMF_EXPORT
     Name ();
-    IMF_EXPORT
     Name (const char text[]);
 
 
@@ -69,7 +67,6 @@
     // Assignment operator
     //--------------------
 
-    IMF_EXPORT
     Name &		operator = (const char text[]);
 
 
diff -Naur a/OpenEXR/IlmImf/ImfPreviewImage.h b/OpenEXR/IlmImf/ImfPreviewImage.h
--- a/OpenEXR/IlmImf/ImfPreviewImage.h	2018-08-10 04:34:58.000000000 +0300
+++ b/OpenEXR/IlmImf/ImfPreviewImage.h	2018-11-04 22:39:19.052487200 +0300
@@ -52,7 +52,7 @@
 OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
 
 
-struct PreviewRgba
+struct IMF_EXPORT PreviewRgba
 {
     unsigned char	r;	// Red, green and blue components of
     unsigned char	g;	// the pixel's color; intensity is
@@ -70,7 +70,7 @@
 };
 
 
-class PreviewImage
+class IMF_EXPORT PreviewImage
 {
   public:
 
@@ -87,7 +87,6 @@
     //
     //--------------------------------------------------------------------
    
-    IMF_EXPORT
      PreviewImage (unsigned int width = 0,
 		   unsigned int height = 0,
 		   const PreviewRgba pixels[] = 0);
@@ -96,12 +95,9 @@
     // Copy constructor, destructor and assignment operator
     //-----------------------------------------------------
 
-    IMF_EXPORT
      PreviewImage (const PreviewImage &other);
-    IMF_EXPORT
     ~PreviewImage ();
 
-    IMF_EXPORT
     PreviewImage &	operator = (const PreviewImage &other);
 
 
diff -Naur a/OpenEXR/IlmImf/ImfStdIO.h b/OpenEXR/IlmImf/ImfStdIO.h
--- a/OpenEXR/IlmImf/ImfStdIO.h	2018-11-04 22:26:43.723504100 +0300
+++ b/OpenEXR/IlmImf/ImfStdIO.h	2018-11-04 22:43:25.795600100 +0300
@@ -58,7 +58,7 @@
 // class OPENEXR_IMF_INTERNAL_NAMESPACE::IStream based on class std::ifstream
 //-------------------------------------------
 
-class StdIFStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream
+class IMF_EXPORT StdIFStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream
 {
   public:
 
@@ -67,7 +67,6 @@
     // The destructor will close the file.
     //-------------------------------------------------------
 
-    IMF_EXPORT
     StdIFStream (const char fileName[]);
 
     
@@ -77,20 +76,14 @@
     // will not close the std::ifstream.
     //---------------------------------------------------------
 
-    IMF_EXPORT
     StdIFStream (std::ifstream &is, const char fileName[]);
 
 
-    IMF_EXPORT
     virtual ~StdIFStream ();
 
-    IMF_EXPORT
     virtual bool	read (char c[/*n*/], int n);
-    IMF_EXPORT
     virtual Int64	tellg ();
-    IMF_EXPORT
     virtual void	seekg (Int64 pos);
-    IMF_EXPORT
     virtual void	clear ();
 
   private:
@@ -105,26 +98,19 @@
 // OPENEXR_IMF_INTERNAL_NAMESPACE::IStream, based on class std::istringstream
 //------------------------------------------------
 
-class StdISStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream
+class IMF_EXPORT StdISStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream
 {
   public:
 
-    IMF_EXPORT
     StdISStream ();
 
-    IMF_EXPORT
     virtual bool	read (char c[/*n*/], int n);
-    IMF_EXPORT
     virtual Int64	tellg ();
-    IMF_EXPORT
     virtual void	seekg (Int64 pos);
-    IMF_EXPORT
     virtual void	clear ();
 
-    IMF_EXPORT
     std::string		str () const; 
 
-    IMF_EXPORT
     void                str (const std::string &s);
 
   private:
@@ -139,7 +125,7 @@
 // class OPENEXR_IMF_INTERNAL_NAMESPACE::OStream based on class std::ofstream
 //-------------------------------------------
 
-class StdOFStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream
+class IMF_EXPORT StdOFStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream
 {
   public:
 
@@ -148,7 +134,6 @@
     // The destructor will close the file.
     //-------------------------------------------------------
 
-    IMF_EXPORT
     StdOFStream (const char fileName[]);
     
 
@@ -158,18 +143,13 @@
     // will not close the std::ofstream.
     //---------------------------------------------------------
 
-    IMF_EXPORT
     StdOFStream (std::ofstream &os, const char fileName[]);
 
 
-    IMF_EXPORT
     virtual ~StdOFStream ();
 
-    IMF_EXPORT
     virtual void	write (const char c[/*n*/], int n);
-    IMF_EXPORT
     virtual Int64	tellp ();
-    IMF_EXPORT
     virtual void	seekp (Int64 pos);
 
   private:
@@ -184,21 +164,16 @@
 // OPENEXR_IMF_INTERNAL_NAMESPACE::OStream, based on class std::ostringstream
 //------------------------------------------------
 
-class StdOSStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream
+class IMF_EXPORT StdOSStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream
 {
   public:
 
-    IMF_EXPORT
     StdOSStream ();
 
-    IMF_EXPORT
     virtual void	write (const char c[/*n*/], int n);
-    IMF_EXPORT
     virtual Int64	tellp ();
-    IMF_EXPORT
     virtual void	seekp (Int64 pos);
 
-    IMF_EXPORT
     std::string		str () const;
 
   private:
