Windows and Subclassing - 'OverflowError': int too long to convert

Eko palypse ekopalypse at gmail.com
Tue Jul 28 15:46:13 EDT 2020


Hello,
I am subclassing a scintilla window and it happens every now and then
that I get an OverflowError. I've logged the message and could narrow down
that it
is a single windows message which causes this trouble. It's WM_ERASEBKGND.

Now the confusing part for me is the following.
According to MS WPARAM
<https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types> is
an UINT_PTR which is defined as

#if defined(_WIN64) typedef unsigned __int64 UINT_PTR; #else typedef
unsigned int UINT_PTR; #endif

wintypes.WPARAM is ctypes.c_ulonglong and is of size 8 on my system.
I'm on a x64 Windows - so far as good, right?

Now when I get this error the message I receive in this situation is always
like this.

hWnd=197364, msg=20, wParam=*18446744072652653190*, lParam=0

Traceback (most recent call last):
  File "_ctypes/callbacks.c", line 237, in 'calling callback function'
  File "<string>", line 121, in new_scintilla2_proc
ctypes.ArgumentError: argument 4: <class 'OverflowError'>: int too long to
convert

I really doubt that 18446744072652653190 is a valid device context but who
knows.
The question is, why do I even get this OverflowError?

If I do wintypes.WPARAM(18446744072652653190) I don't receive an exception
and it is a valid 64bit value, isn't it?

The code I'm using is this

user32 = ctypes.WinDLL('user32', use_last_error=True)

LRESULT = wintypes.LPARAM
WND_PROC = ctypes.WINFUNCTYPE(LRESULT,
                              wintypes.HWND,
                              wintypes.UINT,
                              wintypes.WPARAM,
                              wintypes.LPARAM)

user32.CallWindowProcW.restype = LRESULT
user32.CallWindowProcW.argtypes = [WND_PROC,
                                   wintypes.HWND,
                                   wintypes.UINT,
                                   wintypes.WPARAM,
                                   wintypes.LPARAM]


Any idea what might have caused this?

Thank you for reading
Eren


More information about the Python-list mailing list