DWORD определяется в WinAPI так же, как DWORD в сборке - PullRequest
2 голосов
/ 17 ноября 2011

в WinAPI:

typedef unsigned long DWORD;

Я думаю, что DWORD, WORD ... это базовый тип данных в компьютере, независимо от типа int, без знака long ... он будет окончательно преобразован в DWORD в сборке, почему он должен быть преобразован в unsigned long здесь? Разве я не могу использовать DWORD напрямую без различия?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

В Windows API и на языках ассемблера, основанных на наборе команд x86, DWORD обозначает переменную размером 32 бита.Так что да, обычно это один и тот же размер.

Вы не можете использовать тип DWORD в C ++, не определив его, потому что он не является частью основного языка.Определение типа DWORD может потребоваться изменить в зависимости от вашего компилятора и архитектуры системы.Видимо, для вашей конфигурации тип unsigned long имеет 32 бита, поэтому DWORD определяется как unsigned long.

1 голос
/ 17 ноября 2011

DWORD - это то, чем он определен (в сборке нет автоматического перевода на определенную ширину).Этот typedef необходим, потому что все интерфейсы WinAPI определены с беззнаковыми longs везде, где используется DWORD.Итак, вам нужно это определение для работы с API.

Чтобы ответить на другой вопрос.Этот ответ - нет, DWORD не может быть использован без определения.Это не встроенный тип для компилятора.

Определение DWORD фиксировано для Win32 API: http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx

...