Получение ошибки identifier "QWORD" is undefined в этом коде
Согласно этому документу, QWORD определяется как
typedef unsigned __int64 QWORD;
В качестве обходного пути я вручную добавил определение
typedef uint64_t QWORD;
Кажется странным, что эти общие типы данных BYTE, WORD и DWORD определены, а QWORD нет?
Есть 64-битный тип DWORDLONG, но это имя еще глупее, чем DWORD. См. Типы данных Windows. Он упоминает QWORD, но не говорит, где он определяется!
Сейчас я пойду с DWORDLONG. Это имеет смысл, так как DWORD — это unsigned long, а LONG — это long, поэтому DWORDLONG — это unsigned long long. Спасибо!
глядя на winnt.h кажется, что MS использует ULONGLONG для этой цели в общем смысле. Также есть DWORD64 потому что конечно
@IanAbbott посмотрите на таблицу внизу этой страницы, и вы увидите, что они доступны в BaseTsd.h; WinDef.h; WinNT.h
@phuclv Для всех типов, кроме QWORD, он говорит: «Этот тип объявлен в [имя файла заголовка] следующим образом:», но для QWORD он просто говорит: «Этот тип объявлен следующим образом:», но не говорит, где !





Я нашел QWORD в winDNS.h, как показано в этом коде, который компилируется в старом 32-битном MSVC 2015 года и в 64-битном MSVC 2022 года.
#include <stdio.h>
#include <windows.h>
#include <winDNS.h>
int main(void) {
printf("%zu\n", sizeof(QWORD));
return 0;
}
Вывод программы:
8
Определение находится в этих (MSVC 2015) заголовочных файлах
Sspi.h
WinDNS.h
datacontainer.h
wmcodecdsp.h
wmnetsourcecreator.h
wmscontext.h
wmsdkidl.h
wmsincomingcounters.h
wmspacket.h
Интересно включить заголовок окна, связанный с Domain Name System (DNS), но это решение. Спасибо!
Я добавил список файлов заголовков. Не все из них можно найти, включив их, например #include <datacontainer.h> не найден компилятором. Я думаю, что это может быть пережиток компилятора 2009 года.
Вы можете повторять одно и то же typedef столько раз, сколько хотите, если оно идентично любому предыдущему. Так что вам не нужно искать заголовочный файл.
Типы
WORDиDWORDимеют имена, которые Microsoft придумала в 1980-х годах (или, возможно, раньше). Возможно, в последующие годы они поняли, что это глупое соглашение об именах.