_IN_ 输入型参数 _OUT_ 输出型参数
typedef unsigned long DWORD;//double word
typedef int BOOL;//因为cpu原因4字节的int运行比较快,所以改为int型
typedef unsigned char BYTE;//一个字节
typedef unsigned short WORD;//两个字节表示一个字
typedef float FLOAT;
typedef FLOAT *PFLOAT;//P表示指针
typedef BOOL near *PBOOL;//near和far区别在于,near中P代表指针是新版的表示方法,far是旧版的表示方法为LP
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
typedef WORD near *PWORD;
typedef WORD far *LPWORD;
typedef long far *LPLONG;
typedef DWORD near *PDWORD;
typedef DWORD far *LPDWORD;
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;//C表示const
#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))
将两个单字节变量合成一个双字节的变量并返回,例如MAKEWORD(1234,4567);MAKEWORD会通过将1234和4567进行&0xff将大于一个字节的部分去掉,再通过移位和|操作将两个数合成一个双字节变量,
可以看出MAKEWORD(a,b),b为高位,为低位
#define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))
和上面的大致相同
#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff))
拆分4个字节的变量l 拆分成word型,并返回其中的地位
#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
和上面的相同,这次返回高位
#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff))
#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))
和上面的大致相同只是拆分的变量变为word型,拆成byte型