Макрос определяется как:
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
Почему это может быть использовано для указания идентификатора ресурса (16-разрядного беззнакового int) или его имени (указателя на массив из char)? Разве это не ограничивает адресное пространство (в 32-разрядной системе) до 16 бит? В противном случае, как система знает, использую ли я идентификатор или имя?