Then I found the root cause is WPARAM sometimes appear to a very large
number such as 3556842955, then it will not be considered as a
fixnum.
It seems ecl used last 2 bits of int as tag bit to distinguish
immediate and complex object.
But the meaning of WPARAM is dependent. sometimes it means immediate
and sometimes it means handles, which can be a full 32 bits data.
Anybody has idea for it?
Thanks for your attention.
I don't know anything about win32.lisp, but you could try to use
values of type (unsigned-byte 32) instead of fixnum.
You can create a uint32 type with:
(deftype uint32 () (unsigned-byte 32))
--
__Pascal Bourguignon__