diff --git a/goo/gfile.cc b/goo/gfile.cc
index 6fd4cba..8a96ffe 100644
--- a/goo/gfile.cc
+++ b/goo/gfile.cc
@@ -422,7 +422,7 @@
 #endif
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 GooString *fileNameToUTF8(char *path) {
   GooString *s;
   char *p;
@@ -461,7 +461,7 @@
 #endif
 
 FILE *openFile(const char *path, const char *mode) {
-#ifdef WIN32
+#ifdef _WIN32
   OSVERSIONINFO version;
   wchar_t wPath[_MAX_PATH + 1];
   char nPath[_MAX_PATH + 1];
diff --git a/goo/gfile.h b/goo/gfile.h
index 1365a9c..a5a4fdf 100644
--- a/goo/gfile.h
+++ b/goo/gfile.h
@@ -104,7 +104,7 @@
 // should be "w" or "wb".  Returns true on success.
 extern GBool openTempFile(GooString **name, FILE **f, const char *mode);
 
-#ifdef WIN32
+#ifdef _WIN32
 // Convert a file name from Latin-1 to UTF-8.
 extern GooString *fileNameToUTF8(char *path);
 
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index 3d88646..ed0d234 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
@@ -270,7 +270,7 @@
   ~SysFontList();
   SysFontInfo *find(GooString *name, GBool isFixedWidth, GBool exact);
 
-#ifdef WIN32
+#ifdef _WIN32
   void scanWindowsFonts(GooString *winFontDir);
 #endif
 #ifdef WITH_FONTCONFIGURATION_FONTCONFIG
@@ -278,7 +278,7 @@
 #endif
 private:
 
-#ifdef WIN32
+#ifdef _WIN32
   SysFontInfo *makeWindowsFont(char *name, int fontNum,
 			       char *path);
 #endif
@@ -1121,7 +1121,7 @@
 GooString *GlobalParams::findFontFile(GooString *fontName) {
   static const char *exts[] = { ".pfa", ".pfb", ".ttf", ".ttc", ".otf" };
   GooString *path, *dir;
-#ifdef WIN32
+#ifdef _WIN32
   GooString *fontNameU;
 #endif
   const char *ext;
@@ -1139,7 +1139,7 @@
     dir = (GooString *)fontDirs->get(i);
     for (j = 0; j < (int)(sizeof(exts) / sizeof(exts[0])); ++j) {
       ext = exts[j];
-#ifdef WIN32
+#ifdef _WIN32
       fontNameU = fileNameToUTF8(fontName->getCString());
       path = appendToPath(dir->copy(), fontNameU->getCString());
       delete fontNameU;
diff --git a/splash/SplashMath.h b/splash/SplashMath.h
index ca73c2b..5508985 100644
--- a/splash/SplashMath.h
+++ b/splash/SplashMath.h
@@ -64,7 +64,7 @@
 		   : "=m" (oldCW), "=m" (newCW), "=m" (result), "=r" (t)
 		   : "m" (x));
     return result;
-  #elif defined(WIN32) && defined(_M_IX86)
+  #elif defined(_WIN32) && defined(_M_IX86)
     // floor() and (int)() are implemented separately, which results
     // in changing the FPCW multiple times - so we optimize it with
     // some inline assembly
@@ -111,7 +111,7 @@
 		   : "=m" (oldCW), "=m" (newCW), "=m" (result), "=r" (t)
 		   : "m" (x));
   return result;
-#elif defined(WIN32) && defined(_M_IX86)
+#elif defined(_WIN32) && defined(_M_IX86)
   // ceil() and (int)() are implemented separately, which results
   // in changing the FPCW multiple times - so we optimize it with
   // some inline assembly
@@ -156,7 +156,7 @@
 		   : "=m" (oldCW), "=m" (newCW), "=m" (result), "=r" (t)
 		   : "m" (x));
   return result;
-#elif defined(WIN32) && defined(_M_IX86)
+#elif defined(_WIN32) && defined(_M_IX86)
   // this could use round-to-nearest mode and avoid the "+0.5",
   // but that produces slightly different results (because i+0.5
   // sometimes rounds up and sometimes down using the even rule)
