It behaves similar to ``pointer(obj)``, but the construction is a lot faster.
+.. function:: CopyComPointer(src, dst)
+
+ Copies a COM pointer from *src* to *dst* and returns the Windows specific
+ :c:type:`!HRESULT` value.
+
+ If *src* is not ``NULL``, its ``AddRef`` method is called, incrementing the
+ reference count.
+
+ In contrast, the reference count of *dst* will not be decremented before
+ assigning the new value. Unless *dst* is ``NULL``, the caller is responsible
+ for decrementing the reference count by calling its ``Release`` method when
+ necessary.
+
+ .. availability:: Windows
+
+ .. versionadded:: next
+
+
.. function:: cast(obj, type)
This function is similar to the cast operator in C. It returns a new instance
to help match a non-default ABI.
(Contributed by Petr Viktorin in :gh:`97702`.)
-* The :exc:`~ctypes.COMError` exception is now public.
+* On Windows, the :exc:`~ctypes.COMError` exception is now public.
(Contributed by Jun Komoda in :gh:`126686`.)
+* On Windows, the :func:`~ctypes.CopyComPointer` function is now public.
+ (Contributed by Jun Komoda in :gh:`127275`.)
+
datetime
--------
raise Exception("Version number mismatch", __version__, _ctypes_version)
if _os.name == "nt":
- from _ctypes import COMError, FormatError
+ from _ctypes import COMError, CopyComPointer, FormatError
DEFAULT_MODE = RTLD_LOCAL
if _os.name == "posix" and _sys.platform == "darwin":
raise unittest.SkipTest("Windows-specific test")
-from _ctypes import COMError, CopyComPointer
-from ctypes import HRESULT
+from ctypes import COMError, CopyComPointer, HRESULT
COINIT_APARTMENTTHREADED = 0x2
--- /dev/null
+The :func:`~ctypes.CopyComPointer` function is now public.
+Previously, this was private and only available in ``_ctypes``.