A quoi sert MAKEWORD ?

A quoi sert MAKEWORD ?

La macro attend deux octets comme paramètres :

WORD MAKEWORD(
  BYTE bLow,
  BYTE bHigh
);

Il est défini dans Windef.h comme :

#define MAKEWORD(a,b)   ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))

Il construit essentiellement un mot de 16 bits à partir de deux mots de 1 octet (et n'a pas l'air très portable)

La représentation binaire du nombre 2 avec 1 octet (un MOT) est :| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |

Si nous prenons la concaténation de deux de ces octets comme dans MAKEWORD(2,2) , on obtient :

| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |

Soit 512 + 2 =514 :démo en direct.

Le seul exemple réel de cette macro particulière est dans l'initialisation de Winsock, pour générer le mot de version attendu par WSAStartup .


En gros, MAKEWORD(x,y) est équivalent à ((y) << 8 | (x)); ceci est utile lors du regroupement de deux valeurs de la taille d'un octet dans un seul champ de 16 bits, comme cela se produit souvent avec les structures de message à usage général. L'opération complémentaire est effectuée par le LOBYTE et HIBYTE macros, qui extrait l'octet de poids faible ou de poids fort d'un WORD opérande.

La macro a été largement utilisée pendant les jours 16 bits de Windows, mais son importance a diminué une fois que les programmes 32 bits sont devenus dominants. Un autre vestige de Windows 16 bits réside dans les noms du MSG membres de la structure wParam et lParam , initialement tapés WORD et LONG respectivement; ils sont tous les deux LONG maintenant.

Un aperçu historique considérable peut être trouvé dans le tome de Charles Petzold, Programming Windows, deuxième édition.