diff -Naur Python-2.7.9-orig/Modules/_ctypes/callproc.c Python-2.7.9/Modules/_ctypes/callproc.c
--- Python-2.7.9-orig/Modules/_ctypes/callproc.c	2014-12-10 18:59:51.000000000 +0300
+++ Python-2.7.9/Modules/_ctypes/callproc.c	2014-12-11 13:50:07.425800000 +0300
@@ -752,6 +752,21 @@
 }
 
 
+#undef USE_PYFFI_DELTA
+#ifdef MS_WIN32
+#ifdef X86_ANY
+/* NOTE:
+ * - Standard library does not calculate stack pointer difference
+ *   unlike python specific for MSVC source.
+ * - As X86_ANY is defined in standard libffi only we will use as flag
+ *   to distinguish between standard and customized sources.
+ */
+#else
+/* use customized python libffi source */
+#  define USE_PYFFI_DELTA
+#endif
+#endif
+
 /*
  * libffi uses:
  *
@@ -780,7 +795,9 @@
     ffi_cif cif;
     int cc;
 #ifdef MS_WIN32
+#ifdef USE_PYFFI_DELTA
     int delta;
+#endif /* USE_PYFFI_DELTA */
 #ifndef DONT_USE_SEH
     DWORD dwExceptionCode = 0;
     EXCEPTION_RECORD record;
@@ -831,7 +848,9 @@
 #ifndef DONT_USE_SEH
     __try {
 #endif
+#ifdef USE_PYFFI_DELTA
         delta =
+#endif /* USE_PYFFI_DELTA */
 #endif
                 ffi_call(&cif, (void *)pProc, resmem, avalues);
 #ifdef MS_WIN32
@@ -865,6 +884,7 @@
         return -1;
     }
 #endif
+#ifdef USE_PYFFI_DELTA
 #ifdef MS_WIN64
     if (delta != 0) {
         PyErr_Format(PyExc_RuntimeError,
@@ -894,6 +914,7 @@
         return -1;
     }
 #endif
+#endif /* USE_PYFFI_DELTA */
 #endif
     if ((flags & FUNCFLAG_PYTHONAPI) && PyErr_Occurred())
         return -1;
diff -Naur Python-2.7.9-orig/setup.py Python-2.7.9/setup.py
--- Python-2.7.9-orig/setup.py	2014-12-11 13:50:07.301000000 +0300
+++ Python-2.7.9/setup.py	2014-12-11 13:50:07.425800000 +0300
@@ -2108,6 +2108,8 @@
                         depends=depends)
         ext_test = Extension('_ctypes_test',
                              sources=['_ctypes/_ctypes_test.c'])
+        if host_platform.startswith(('mingw', 'win')):
+            ext_test.libraries.extend(['oleaut32'])
         self.extensions.extend([ext, ext_test])
 
         if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
@@ -2141,6 +2143,8 @@
         if ffi_inc and ffi_lib:
             ext.include_dirs.extend(ffi_inc)
             ext.libraries.append(ffi_lib)
+            if host_platform.startswith(('mingw', 'win')):
+                ext.libraries.extend(['ole32', 'oleaut32', 'uuid'])
             self.use_system_libffi = True
 
 
