Então cara, WORD
e DWORD
são dois tipos de dados criados por um simples typedef
, a única utilidade deles é simplesmente padronizar algumas funções que necessitam de uma faixa específica de valores.
Vou tentar exemplificar para ficar claro:
1) Imagine que você tenha uma API escrita em C ou C++;
2) Agora imagine que você tem algumas partes de sua API que necessita de trabalhar com tipos unsigned int
;
3) Então sua API se torna forte no mercado e você percebe a necessidade de alterar o alcance destes valores que foram definidos como unsigned int
para unsigned long long
. Você vai ir mudando em cada parte da sua API? Seria muito trabalhoso.
4) Mas se você determinou um novo tipo para esses unsigned int
com um typedef
você mudará apenas em uma parte do seu código. Muito mais simples.
Desta forma você determina como será a faixa de valores que alguns métodos, classes ou funções que sua API devem trabalhar. Porém para chegar nesta conclusão que um tipo de dado deve ser criado apartir de um typedef
é necessário pensar e repensar ou seja projetar o sistema ou a API antes de começar a escrever o código, se possível prever até mesmo o que sua API poderá fazer no futuro quando hardware estiver mais avançado
WORD e DWORD são tipos utilizados em programação com a WinApi ou seja API do Windows. A regra é, quando estiver trabalhando com alguma API específica, siga as regras desta API, dance conforme a música. Em programação de windows exitem tipos como WPARAM
, LPARAM
, DWORD
, WORD
, UINT
, TCHAR
, LPSTR
, LPWSTR
, LPCTSTR
, eu não vou citar todos pois são muitos.
Se você quer trabalhar com segurança utilize os tipos de dados da API que estiver usando. Outro exemplo é a API OpenGL nela são definitos alguns tipos como GLint
, GLfloat
, GLshort
já na API OpenCL existem cl_int
, cl_char
, cl_uchar
e etc…
Na prática:
Se um método ou função retornar um DWORD tenha certeza que você tem uma variável do tipo DWORD para receber este dado. Isto lhe dará 100% de segurança. Não utilize um tipo unsigned long
para receber um DWORD, mesmo DWORD sendo um typedef
de unsigned long
.
Se ainda houverem dúvidas por favor poste que tentaremos ajudar.