Pourquoi MAKEINTRESOURCE () fonctionne-t-il?

La macro est définie comme:

#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))

Comment cela peut être utilisé pour indiquer un ID de ressource (16 bits unsigned int) ou de son nom (un pointeur vers un tableau de char)?
N'est-ce pas effectivement de limiter l'espace d'adressage (sur un système 32 bits à 16 bits? Sinon, comment fait-on pour savoir si je suis en utilisant un ID ou un nom?

source d'informationauteur user418680