mirror of https://github.com/python/cpython
gh-126615: `ctypes`: Make `COMError` public (GH-126686)
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
parent
9d2a879aff
commit
5b4502560b
|
@ -1707,12 +1707,6 @@ in :mod:`!ctypes`) which inherits from the private :class:`_CFuncPtr` class:
|
||||||
and raise an exception if the foreign function call failed.
|
and raise an exception if the foreign function call failed.
|
||||||
|
|
||||||
|
|
||||||
.. exception:: ArgumentError
|
|
||||||
|
|
||||||
This exception is raised when a foreign function call cannot convert one of the
|
|
||||||
passed arguments.
|
|
||||||
|
|
||||||
|
|
||||||
.. audit-event:: ctypes.set_exception code foreign-functions
|
.. audit-event:: ctypes.set_exception code foreign-functions
|
||||||
|
|
||||||
On Windows, when a foreign function call raises a system exception (for
|
On Windows, when a foreign function call raises a system exception (for
|
||||||
|
@ -1799,10 +1793,15 @@ different ways, depending on the type and number of the parameters in the call:
|
||||||
integer. *name* is name of the COM method. *iid* is an optional pointer to
|
integer. *name* is name of the COM method. *iid* is an optional pointer to
|
||||||
the interface identifier which is used in extended error reporting.
|
the interface identifier which is used in extended error reporting.
|
||||||
|
|
||||||
|
If *iid* is not specified, an :exc:`OSError` is raised if the COM method
|
||||||
|
call fails. If *iid* is specified, a :exc:`~ctypes.COMError` is raised
|
||||||
|
instead.
|
||||||
|
|
||||||
COM methods use a special calling convention: They require a pointer to
|
COM methods use a special calling convention: They require a pointer to
|
||||||
the COM interface as first argument, in addition to those parameters that
|
the COM interface as first argument, in addition to those parameters that
|
||||||
are specified in the :attr:`!argtypes` tuple.
|
are specified in the :attr:`!argtypes` tuple.
|
||||||
|
|
||||||
|
|
||||||
The optional *paramflags* parameter creates foreign function wrappers with much
|
The optional *paramflags* parameter creates foreign function wrappers with much
|
||||||
more functionality than the features described above.
|
more functionality than the features described above.
|
||||||
|
|
||||||
|
@ -2741,3 +2740,39 @@ Arrays and pointers
|
||||||
|
|
||||||
Returns the object to which to pointer points. Assigning to this
|
Returns the object to which to pointer points. Assigning to this
|
||||||
attribute changes the pointer to point to the assigned object.
|
attribute changes the pointer to point to the assigned object.
|
||||||
|
|
||||||
|
|
||||||
|
.. _ctypes-exceptions:
|
||||||
|
|
||||||
|
Exceptions
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
.. exception:: ArgumentError
|
||||||
|
|
||||||
|
This exception is raised when a foreign function call cannot convert one of the
|
||||||
|
passed arguments.
|
||||||
|
|
||||||
|
|
||||||
|
.. exception:: COMError(hresult, text, details)
|
||||||
|
|
||||||
|
Windows only: This exception is raised when a COM method call failed.
|
||||||
|
|
||||||
|
.. attribute:: hresult
|
||||||
|
|
||||||
|
The integer value representing the error code.
|
||||||
|
|
||||||
|
.. attribute:: text
|
||||||
|
|
||||||
|
The error message.
|
||||||
|
|
||||||
|
.. attribute:: details
|
||||||
|
|
||||||
|
The 5-tuple ``(descr, source, helpfile, helpcontext, progid)``.
|
||||||
|
|
||||||
|
*descr* is the textual description. *source* is the language-dependent
|
||||||
|
``ProgID`` for the class or application that raised the error. *helpfile*
|
||||||
|
is the path of the help file. *helpcontext* is the help context
|
||||||
|
identifier. *progid* is the ``ProgID`` of the interface that defined the
|
||||||
|
error.
|
||||||
|
|
||||||
|
.. versionadded:: next
|
||||||
|
|
|
@ -273,6 +273,9 @@ ctypes
|
||||||
to help match a non-default ABI.
|
to help match a non-default ABI.
|
||||||
(Contributed by Petr Viktorin in :gh:`97702`.)
|
(Contributed by Petr Viktorin in :gh:`97702`.)
|
||||||
|
|
||||||
|
* The :exc:`~ctypes.COMError` exception is now public.
|
||||||
|
(Contributed by Jun Komoda in :gh:`126686`.)
|
||||||
|
|
||||||
datetime
|
datetime
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ if __version__ != _ctypes_version:
|
||||||
raise Exception("Version number mismatch", __version__, _ctypes_version)
|
raise Exception("Version number mismatch", __version__, _ctypes_version)
|
||||||
|
|
||||||
if _os.name == "nt":
|
if _os.name == "nt":
|
||||||
from _ctypes import FormatError
|
from _ctypes import COMError, FormatError
|
||||||
|
|
||||||
DEFAULT_MODE = RTLD_LOCAL
|
DEFAULT_MODE = RTLD_LOCAL
|
||||||
if _os.name == "posix" and _sys.platform == "darwin":
|
if _os.name == "posix" and _sys.platform == "darwin":
|
||||||
|
|
|
@ -65,15 +65,16 @@ class TestWintypes(unittest.TestCase):
|
||||||
sizeof(c_void_p))
|
sizeof(c_void_p))
|
||||||
|
|
||||||
def test_COMError(self):
|
def test_COMError(self):
|
||||||
from _ctypes import COMError
|
from ctypes import COMError
|
||||||
if support.HAVE_DOCSTRINGS:
|
if support.HAVE_DOCSTRINGS:
|
||||||
self.assertEqual(COMError.__doc__,
|
self.assertEqual(COMError.__doc__,
|
||||||
"Raised when a COM method call failed.")
|
"Raised when a COM method call failed.")
|
||||||
|
|
||||||
ex = COMError(-1, "text", ("details",))
|
ex = COMError(-1, "text", ("descr", "source", "helpfile", 0, "progid"))
|
||||||
self.assertEqual(ex.hresult, -1)
|
self.assertEqual(ex.hresult, -1)
|
||||||
self.assertEqual(ex.text, "text")
|
self.assertEqual(ex.text, "text")
|
||||||
self.assertEqual(ex.details, ("details",))
|
self.assertEqual(ex.details,
|
||||||
|
("descr", "source", "helpfile", 0, "progid"))
|
||||||
|
|
||||||
self.assertEqual(COMError.mro(),
|
self.assertEqual(COMError.mro(),
|
||||||
[COMError, Exception, BaseException, object])
|
[COMError, Exception, BaseException, object])
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
The :exc:`~ctypes.COMError` exception is now public.
|
||||||
|
Previously, this was private and only available in ``_ctypes``.
|
Loading…
Reference in New Issue