diff --git a/CommandLineArguments.cxx b/CommandLineArguments.cxx
index 0d5039189df16008a5f33f22191510c90f727579..9a0000c534d38793251fc9735f7b418d6b811760 100644
--- a/CommandLineArguments.cxx
+++ b/CommandLineArguments.cxx
@@ -513,7 +513,7 @@ const char* CommandLineArguments::GetArgv0()
 //----------------------------------------------------------------------------
 unsigned int CommandLineArguments::GetLastArgument()
 {
-  return this->Internals->LastArgument + 1;
+  return (unsigned int)this->Internals->LastArgument + 1;
 }
 
 //----------------------------------------------------------------------------
@@ -620,7 +620,7 @@ void CommandLineArguments::GenerateHelp()
       str << buffer;
       }
     const char* ptr = this->Internals->Callbacks[mpit->first].Help;
-    int len = strlen(ptr);
+    size_t len = strlen(ptr);
     int cnt = 0;
     while ( len > 0)
       {
diff --git a/Glob.cxx b/Glob.cxx
index c2e471041754f09c7de7582ea5cec2adbde264b1..17739a07c9d0034c06e0abd1046d074bba568791 100644
--- a/Glob.cxx
+++ b/Glob.cxx
@@ -338,7 +338,7 @@ bool Glob::FindFiles(const kwsys_stl::string& inexpr)
     {
     if ( cc > 0 && expr[cc] == '/' && expr[cc-1] != '\\' )
       {
-      last_slash = cc;
+      last_slash = (int)cc;
       }
     if ( cc > 0 &&
       (expr[cc] == '[' || expr[cc] == '?' || expr[cc] == '*') &&
@@ -371,7 +371,7 @@ bool Glob::FindFiles(const kwsys_stl::string& inexpr)
             }
           }
         }
-      skip = cc + 1;
+      skip = int(cc + 1);
       }
     else
 #endif
diff --git a/ProcessWin32.c b/ProcessWin32.c
index d815cfe8d70a5ba4bcad47fa4148c88482a198af..8443ee3868511b092237cdd819bb041f0bf2db1f 100644
--- a/ProcessWin32.c
+++ b/ProcessWin32.c
@@ -2141,7 +2141,7 @@ void kwsysProcessCleanup(kwsysProcess* cp, int error)
 void kwsysProcessCleanErrorMessage(kwsysProcess* cp)
 {
   /* Remove trailing period and newline, if any.  */
-  int length = strlen(cp->ErrorMessage);
+  size_t length = strlen(cp->ErrorMessage);
   if(cp->ErrorMessage[length-1] == '\n')
     {
     cp->ErrorMessage[length-1] = 0;
diff --git a/Registry.cxx b/Registry.cxx
index d2191f1008805c9a83b6882a8d60bbc7535599e0..0773065c4eef6d1d98595d3f788224436b36a49a 100644
--- a/Registry.cxx
+++ b/Registry.cxx
@@ -705,7 +705,7 @@ void RegistryHelper::SetSubKey(const char* sk)
 char *RegistryHelper::Strip(char *str)
 {
   int cc;
-  int len;
+  size_t len;
   char *nstr;
   if ( !str )
     {
@@ -713,7 +713,7 @@ char *RegistryHelper::Strip(char *str)
     }
   len = strlen(str);
   nstr = str;
-  for( cc=0; cc<len; cc++ )
+  for( cc=0; cc<(int)len; cc++ )
     {
     if ( !isspace( *nstr ) )
       {
@@ -721,7 +721,7 @@ char *RegistryHelper::Strip(char *str)
       }
     nstr ++;
     }
-  for( cc=(strlen(nstr)-1); cc>=0; cc-- )
+  for( cc=int(strlen(nstr)-1); cc>=0; cc-- )
     {
     if ( !isspace( nstr[cc] ) )
       {
diff --git a/SystemTools.cxx b/SystemTools.cxx
index 30290fa55321440460cd9499cb53279422f96b33..6217cb04589d7e685e3d3d964489257dfbe99a64 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -1166,7 +1166,7 @@ int SystemTools::EstimateFormatLength(const char *format, va_list ap)
   
   // Start with the length of the format string itself.
 
-  int length = strlen(format);
+  size_t length = strlen(format);
   
   // Increase the length for every argument in the format.
 
@@ -1219,7 +1219,7 @@ int SystemTools::EstimateFormatLength(const char *format, va_list ap)
       }
     }
   
-  return length;
+  return (int)length;
 }
 
 kwsys_stl::string SystemTools::EscapeChars(
@@ -2581,7 +2581,7 @@ int OldWindowsGetLongPath(kwsys_stl::string const& shortPath,
     {
     longPath = shortPath;
     }
-  return longPath.size();
+  return (int)longPath.size();
 }
 
 
diff --git a/hashtable.hxx.in b/hashtable.hxx.in
index ccb3f3844721c36bde92b5a15f754e12d3effca7..2414dbac7cb8e7cea9a7dc8c2cba75069be5c32c 100644
--- a/hashtable.hxx.in
+++ b/hashtable.hxx.in
@@ -392,7 +392,7 @@ static const unsigned long _stl_prime_list[_stl_num_primes] =
   1610612741ul, 3221225473ul, 4294967291ul
 };
 
-inline unsigned long _stl_next_prime(unsigned long __n)
+inline size_t _stl_next_prime(size_t __n)
 {
   const unsigned long* __first = _stl_prime_list;
   const unsigned long* __last = _stl_prime_list + (int)_stl_num_primes;
diff --git a/testDynamicLoader.cxx b/testDynamicLoader.cxx
index a37b53f969f6940c79899b5a76a9ebb696edde65..d53afc095a8ed3b9fc90014e911bf978d0e8897f 100644
--- a/testDynamicLoader.cxx
+++ b/testDynamicLoader.cxx
@@ -86,6 +86,9 @@ int TestDynamicLoader(const char* libname, const char* symbol, int r1, int r2, i
 
 int main(int argc, char *argv[])
 {
+#if defined(_WIN32)
+  SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
+#endif
   int res;
   if( argc == 3 )
     {