Solución:
DWORD
no es un tipo C ++, está definido en <windows.h>
.
La razon es que DWORD
tiene un rango y formato específicos en los que se basan las funciones de Windows, por lo que si necesita ese rango específico, use ese tipo. (O como dicen “Cuando estés en Roma, haz lo que hacen los romanos”). Para ti, eso corresponde a unsigned int
, pero puede que no siempre sea así. Para estar seguro, use DWORD
cuando una DWORD
se espera, independientemente de lo que realmente pueda ser.
Por ejemplo, si alguna vez cambiaron el rango o formato de unsigned int
podrían usar un tipo diferente para subyacer DWORD
para mantener los mismos requisitos, y todo el código usando DWORD
no sería más sabio. (Del mismo modo, podrían decidir DWORD
necesita ser unsigned long long
, cámbielo y todo el código usando DWORD
no sería más sabio.)
También tenga en cuenta unsigned int
lo hace no necesario tener el rango de 0 a 4.294.967.295. Mira aquí.
Cuando MS-DOS y Windows 3.1 funcionaban en modo de 16 bits, una palabra Intel 8086 era de 16 bits, una palabra de Microsoft WORD de 16 bits, una DWORD de Microsoft de 32 bits y el int sin signo de un compilador típico era de 16 bits.
Cuando Windows NT operaba en modo de 32 bits, una palabra Intel 80386 era de 32 bits, una palabra de Microsoft WORD de 16 bits, una DWORD de Microsoft de 32 bits y el int sin signo de un compilador típico era de 32 bits. Los nombres WORD y DWORD ya no eran autodescriptivos, pero conservaban la funcionalidad de los programas de Microsoft.
Cuando Windows opera en modo de 64 bits, una palabra de Intel es de 64 bits, una palabra de Microsoft es de 16 bits, una DWORD de Microsoft es de 32 bits y el int sin signo de un compilador típico es de 32 bits. Los nombres WORD y DWORD ya no son autodescriptivos, Y un int sin firmar ya no se ajusta al principio de las sorpresas mínimas, pero conservan la funcionalidad de muchos programas.
No creo que WORD o DWORD vayan a cambiar nunca.
Los desarrolladores de SDK prefieren definir sus propios tipos utilizando typedef. Esto permite cambiar los tipos subyacentes solo en un lugar, sin cambiar todo el código del cliente. Es importante seguir esta convención. Es poco probable que se cambie DWORD, pero tipos como DWORD_PTR son diferentes en diferentes plataformas, como Win32 y x64. Entonces, si alguna función tiene el parámetro DWORD, use DWORD y no unsigned int, y su código se compilará en todas las versiones futuras de encabezados de Windows.