diff -rupN --no-dereference Python-3.10.9/Lib/ctypes/__init__.py Python-3.10.9-new/Lib/ctypes/__init__.py --- Python-3.10.9/Lib/ctypes/__init__.py 2022-12-06 19:31:21.000000000 +0100 +++ Python-3.10.9-new/Lib/ctypes/__init__.py 2022-12-08 09:37:00.565024888 +0100 @@ -456,7 +456,9 @@ class LibraryLoader(object): cdll = LibraryLoader(CDLL) pydll = LibraryLoader(PyDLL) -if _os.name == "nt": +if _os.name == "nt" and _sys.version.find('GCC') >= 0: + pythonapi = PyDLL("libpython%d.%d%s.dll" % (_sys.version_info[:2] + (_sys.abiflags,)), None) +elif _os.name == "nt": pythonapi = PyDLL("python dll", None, _sys.dllhandle) elif _sys.platform == "cygwin": pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2]) diff -rupN --no-dereference Python-3.10.9/setup.py Python-3.10.9-new/setup.py --- Python-3.10.9/setup.py 2022-12-08 09:37:00.561024888 +0100 +++ Python-3.10.9-new/setup.py 2022-12-08 09:37:00.566024888 +0100 @@ -2267,6 +2267,10 @@ class PyBuildExt(build_ext): return True def configure_ctypes(self, ext): + if HOST_PLATFORM == 'win32': + ext.libraries.extend(['ole32', 'oleaut32', 'uuid']) + ext.export_symbols.extend(['DllGetClassObject PRIVATE', + 'DllCanUnloadNow PRIVATE']) return True def detect_ctypes(self): @@ -2317,9 +2321,12 @@ class PyBuildExt(build_ext): self.add(ext) if TEST_EXTENSIONS: # function my_sqrt() needs libm for sqrt() + ext_test_libs = ['m'] + if HOST_PLATFORM.startswith(('mingw', 'win')): + ext_test_libs.extend(['oleaut32']) self.add(Extension('_ctypes_test', sources=['_ctypes/_ctypes_test.c'], - libraries=['m'])) + libraries=ext_test_libs)) ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") ffi_lib = None @@ -2364,6 +2371,8 @@ class PyBuildExt(build_ext): ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) + if HOST_PLATFORM.startswith(('mingw', 'win')): + ext.libraries.extend(['ole32', 'oleaut32', 'uuid']) self.use_system_libffi = True if sysconfig.get_config_var('HAVE_LIBDL'):