-
-
Notifications
You must be signed in to change notification settings - Fork 33.1k
Open
Labels
OS-windowsstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-replRelated to the interactive shellRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Everywhere ctypes.GetLastError() is used, even though use_last_error is specified
cpython/Lib/_pyrepl/windows_console.py
Line 617 in e1c09ff
_KERNEL32 = WinDLL("kernel32", use_last_error=True) |
This will always return the "swapped" error, as can be seen here
cpython/Modules/_ctypes/callbacks.c
Lines 201 to 222 in e1c09ff
#ifdef MS_WIN32 | |
if (flags & FUNCFLAG_USE_LASTERROR) { | |
int temp = space[1]; | |
space[1] = GetLastError(); | |
SetLastError(temp); | |
} | |
#endif | |
} | |
result = PyObject_Vectorcall(callable, args, nargs, NULL); | |
if (result == NULL) { | |
PyErr_FormatUnraisable("Exception ignored while " | |
"calling ctypes callback function %R", | |
callable); | |
} | |
#ifdef MS_WIN32 | |
if (flags & FUNCFLAG_USE_LASTERROR) { | |
int temp = space[1]; | |
space[1] = GetLastError(); | |
SetLastError(temp); | |
} |
or carefully reading the docs (the code was easier to read for me :)
The rule is easy: use_last_error=True
implies using ctypes.get_last_error(), which @eryksun has for example explained here: https://discuss.python.org/t/a-ctypes-function-to-list-all-loaded-shared-libraries/36370/10
CPython versions tested on:
CPython main branch
Operating systems tested on:
Windows
Metadata
Metadata
Assignees
Labels
OS-windowsstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-replRelated to the interactive shellRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error