Потому что в 16-битном формате это были разные соглашения. Начиная с плоского режима x86, все, что связано windows, равно __stdcall
(Pu sh справа налево, вызываемый абонент очищает стек). __cdecl
, __fastcall
также существует.
Начиная с x64, существует практически только один , и все это игнорируется.
То же самое происходит со многими другими Windows элементы, такие как WPARAM и LPARAM. Когда-то WPARAM был 16-разрядным, в x86 они оба были 32-разрядными, а в x64 - 64-разрядными.