diff --git a/CMakeLists.txt b/CMakeLists.txt
index 93d9cbd78c683d57abfb1210510072aab13a686c..a0fc63d76145cca419fc964cb5f48b42464e58d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -718,7 +718,9 @@ IF(KWSYS_C_SRCS OR KWSYS_CXX_SRCS)
     ${KWSYS_C_SRCS} ${KWSYS_CXX_SRCS})
   IF(KWSYS_USE_DynamicLoader)
     IF(UNIX)
-      TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE} ${CMAKE_DL_LIBS})
+      IF(NOT CYGWIN AND NOT MINGW)
+        TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE} ${CMAKE_DL_LIBS})
+      ENDIF(NOT CYGWIN AND NOT MINGW)
     ENDIF(UNIX)
   ENDIF(KWSYS_USE_DynamicLoader)
 
diff --git a/DynamicLoader.cxx b/DynamicLoader.cxx
index 5ef0ef8fd93b372d1b05a991af9c4b369fb22ffe..e2e0c27cfbb11e01b9c77e0ee0a8b15056e7243a 100644
--- a/DynamicLoader.cxx
+++ b/DynamicLoader.cxx
@@ -220,7 +220,7 @@ const char* DynamicLoader::LastError()
 
 // ---------------------------------------------------------------
 // 3. Implementation for Windows win32 code
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
 #include <windows.h>
 #define DYNAMICLOADER_DEFINED 1
 
diff --git a/DynamicLoader.hxx.in b/DynamicLoader.hxx.in
index 752297f1a87cd423f19fb8fa0a4f72ffb8debed7..54a742ee21bc465fd8843e513002b5ed7069c794 100644
--- a/DynamicLoader.hxx.in
+++ b/DynamicLoader.hxx.in
@@ -18,7 +18,7 @@
 
 #if defined(__hpux)
   #include <dl.h>
-#elif defined(_WIN32)
+#elif defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
   #include <windows.h>
 #elif defined(__APPLE__)
   #include <AvailabilityMacros.h>
@@ -56,7 +56,7 @@ public:
 // They are different on several different OS's
 #if defined(__hpux)
   typedef shl_t LibraryHandle;
-#elif defined(_WIN32)
+#elif defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
   typedef HMODULE LibraryHandle;
 #elif defined(__APPLE__)
   #if MAC_OS_X_VERSION_MAX_ALLOWED < 1030