I've heard that Microsoft WORD will always be 16-bit and DWORD will always be 32-bit. Is this because they change the types (say from unsigned long to unsigned short) whenever the system WORD size changes?

In this case that means there is no need to change the typedef between compiler settings, but if the sizes were to change the WORD and DWORD typedefs would change to ensure their sizes remain 16- and 32- bits respectively.

If you are worried about sizes on Microsoft® Visual Studio® you can always use the __int16 and __int32 family of primitives.