diff --git a/RawSpeed/Camera.h b/RawSpeed/Camera.h
index 7b3045d..4363c1b 100644
--- a/RawSpeed/Camera.h
+++ b/RawSpeed/Camera.h
@@ -6,6 +6,7 @@
 #include <libxml/parser.h>
 #include "BlackArea.h"
 #include "CameraMetadataException.h"
+#include "dlldef.h"
 /* 
     RawSpeed - RAW file decoder.
 
@@ -30,7 +31,7 @@
 
 namespace RawSpeed {
 
-class Camera
+class DllDef Camera
 {
 public:
   Camera(xmlDocPtr doc, xmlNodePtr cur);
diff --git a/RawSpeed/CameraMetaData.h b/RawSpeed/CameraMetaData.h
index 616b2bb..c6b8031 100644
--- a/RawSpeed/CameraMetaData.h
+++ b/RawSpeed/CameraMetaData.h
@@ -27,9 +27,10 @@
     http://www.klauspost.com
 */
 
+#include "dlldef.h"
 namespace RawSpeed {
 
-class CameraMetaData
+class DllDef CameraMetaData
 {
 public:
   CameraMetaData();
diff --git a/RawSpeed/CameraMetadataException.h b/RawSpeed/CameraMetadataException.h
index 55a2814..52d5ea1 100644
--- a/RawSpeed/CameraMetadataException.h
+++ b/RawSpeed/CameraMetadataException.h
@@ -22,10 +22,11 @@
 #ifndef CAMERA_METADATA_EXCEPTION_H
 #define CAMERA_METADATA_EXCEPTION_H
 
+#include "dlldef.h"
 
 namespace RawSpeed {
 
-void ThrowCME(const char* fmt, ...);
+void DllDef ThrowCME(const char* fmt, ...);
 
 class CameraMetadataException :
   public std::runtime_error
diff --git a/RawSpeed/FileMap.h b/RawSpeed/FileMap.h
index 5c15918..bcd2a79 100644
--- a/RawSpeed/FileMap.h
+++ b/RawSpeed/FileMap.h
@@ -25,6 +25,7 @@
 */
 
 #include "IOException.h"
+#include "dlldef.h"
 
 namespace RawSpeed {
 
@@ -36,7 +37,7 @@ namespace RawSpeed {
  * This can also be done as a MemMap 
  * 
  *****************************/
-class FileMap
+class DllDef FileMap
 {
 public:
   FileMap(uint32 _size);                 // Allocates the data array itself
diff --git a/RawSpeed/FileReader.h b/RawSpeed/FileReader.h
index 7448ec2..fb42ac0 100644
--- a/RawSpeed/FileReader.h
+++ b/RawSpeed/FileReader.h
@@ -24,10 +24,11 @@
 
 #include "FileIOException.h"
 #include "FileMap.h"
+#include "dlldef.h"
 
 namespace RawSpeed {
 
-class FileReader
+class DllDef FileReader
 {
 public:
 	FileReader(LPCWSTR filename);
diff --git a/RawSpeed/RawDecoder.h b/RawSpeed/RawDecoder.h
index a6c4708..b35cae5 100644
--- a/RawSpeed/RawDecoder.h
+++ b/RawSpeed/RawDecoder.h
@@ -9,6 +9,7 @@
 #include "BitPumpPlain.h"
 #include "CameraMetaData.h"
 #include "TiffIFD.h"
+#include "dlldef.h"
 
 /* 
     RawSpeed - RAW file decoder.
@@ -48,7 +49,7 @@ class RawDecoderThread
     RawDecoder* parent;
 };
 
-class RawDecoder 
+class DllDef RawDecoder 
 {
 public:
   /* Construct decoder instance - FileMap is a filemap of the file to be decoded */
diff --git a/RawSpeed/RawImage.h b/RawSpeed/RawImage.h
index 5741760..74cea96 100644
--- a/RawSpeed/RawImage.h
+++ b/RawSpeed/RawImage.h
@@ -26,13 +26,15 @@
     http://www.klauspost.com
 */
 
+#include "dlldef.h"
+
 namespace RawSpeed {
 
 class RawImage;
 class RawImageWorker;
 typedef enum {TYPE_USHORT16, TYPE_FLOAT32} RawImageType;
 
-class RawImageData
+class DllDef RawImageData
 {
   friend class RawImageWorker;
 public:
@@ -125,7 +127,7 @@ protected:
   int end_y;
 };
 
- class RawImage {
+ class DllDef RawImage {
  public:
    static RawImage create(RawImageType type = TYPE_USHORT16);
    static RawImage create(iPoint2D dim, RawImageType type = TYPE_USHORT16, uint32 componentsPerPixel = 1);
diff --git a/RawSpeed/RawParser.h b/RawSpeed/RawParser.h
index 9ef86e3..1b3cb83 100644
--- a/RawSpeed/RawParser.h
+++ b/RawSpeed/RawParser.h
@@ -25,10 +25,11 @@
 
 #include "FileMap.h"
 #include "RawDecoder.h"
+#include "dlldef.h"
 
 namespace RawSpeed {
 
-class RawParser 
+class DllDef RawParser 
 {
 public:
   RawParser(FileMap* input);
diff --git a/RawSpeed/dlldef.h b/RawSpeed/dlldef.h
new file mode 100644
index 0000000..c806451
--- /dev/null
+++ b/RawSpeed/dlldef.h
@@ -0,0 +1,20 @@
+#ifndef DLLDEF_H
+#define DLLDEF_H
+
+#ifdef WIN32
+#ifdef _MSC_VER
+#pragma warning( disable: 4251 )
+#endif
+#ifdef RAWSPEED_NODLL
+# define DllDef
+#else
+# ifdef RAWSPEED_BUILDLIB
+#    define DllDef   __declspec( dllexport )
+# else
+#    define DllDef   __declspec( dllimport )
+# endif
+#endif
+#else
+#  define DllDef
+#endif
+#endif
