diff --git a/src/opus.h b/src/opus.h
index 93d6c7c292d2d1af241126caf03adce5d63e0c5e..aa18dd0609c7312089669f5bdafd7c12805299bf 100644
--- a/src/opus.h
+++ b/src/opus.h
@@ -35,11 +35,21 @@ extern "C" {
 #endif
 
 #if defined(__GNUC__) && defined(OPUS_BUILD)
-#define OPUS_EXPORT __attribute__ ((visibility ("default")))
+
+# define OPUS_EXPORT __attribute__ ((visibility ("default")))
+
 #elif defined(WIN32)
-#define OPUS_EXPORT __declspec(dllexport)
+
+# ifdef OPUS_BUILD
+#   define OPUS_EXPORT __declspec(dllexport)
+# else
+#   define OPUS_EXPORT __declspec(dllimport)
+# endif
+
 #else
-#define OPUS_EXPORT
+
+# define OPUS_EXPORT
+
 #endif
 
 #define __check_int(x) (((void)((x) == (int)0)), (int)(x))