Holy cow, I wrote a book!
when the WM_COPYDATA message was introduced.
The WM_COPYDATA message was introduced by Win32.
It did not exist in 16-bit Windows.
But it was there all along.
The WM_COPYDATA message was carefully
designed so that it worked in 16-bit Windows automatically.
In other words, you
retained your source code compatibility
between 16-bit and 32-bit Windows
without having to do a single thing.
Phew, one fewer
breaking change between 16-bit and 32-bit Windows.
As Neil noted,
there's nothing stopping you from sending message 0x004A
in 16-bit Windows
with a window handle in the wParam and a pointer to a
COPYDATASTRUCT in the lParam.
Since all 16-bit applications ran in the same address space,
the null marshaller successfully marshals the data between the
In a sense, support for the WM_COPYDATA
message was ported downlevel even before the message existed!