Перейти к содержимому

Dword c что это

  • автор:

Dword c что это

Если вы продолжаете доказывать то, что другие уже сделали, приобретая уверенность, увеличивая
сложность ваших решений просто ради интереса, — в один прекрасный день вы оглянетесь вокруг и
увидите, что никто в действительности не делал этого!
Ричард Фейнманн

Доброй ночи, сегодня я хочу рассказать о типах данных и именах переменных при программировании под Windows.

Типы данных.
В Windows-программах вместо стандартных типов данных из C/C++ (int, long, и т.д.) применяются типы данных, определённые в различных заголовочных файлах. Наиболее часто используемые: HANDLE, HWND, BYTE, WORD, DWORD, UNIT, LONG, BOOL, LPSTR и LPCSTR. Тип HANDLE обозначает 32-разрядное целое, используемое в качестве дескриптора. Есть несколько похожих типов данных, которые имеют ту же длину, что и HANDLE, и начинаются с символа Н. Дескриптор — это просто число, определяющее некоторый ресурс. Например, тип HWND обозначает 32-разрядное целое — дескриптор окна. Тип BYTE обозначает 8-разрядное беззнаковое символьное значение, тип WORD — 16-разрядное беззнаковое короткое целое, тип DWORD — 32-разрядный целочисленный беззнаковый тип, тип UNIT — беззнаковое 32-разрядное целое. Тип LONG эквивалентен типу long. Тип BOOL обозначает целое и используется, когда значение может быть либо истинным, либо ложным. Тип LPSTR определяет указатель на строку, а LPCSTR — константный (const) указатель на строку. LPTSTR — это TCHAR *, а LPCTSTR — const TCHAR *. Для стандартных типов Microsoft C не применяется оператор *.

Переменные.
Для имён переменных Microsoft предлагает систему, предусматривающую обозначение именуемых типов данных (используется префикс).Само имя переменной начинается с заглавной буквы.
Типы префиксов:
b — BOOL
c — символ (байт)
s — строка (char или CString)
dw — DWORD
f — 16-битный флаг (битовая карта)
fn — функция
h — HANDLE
l — LONG
i — int
lp — длинный указатель
n — целое (16 бит)
p — указатель
pt — точка (два 32-битных целых)
w — WORD
sz — указатель на строку с завершающим нулём
lpsz — длинный указатель на строку с завершающим нулём
fdw — двойное слово, содержащее флаги доступа к файлу
rgb — длинное целое, содержащее комбинацию цветов RGB
Использование префиксов необходимо далеко не всегда, поэтому пишите так, как вам удобно.

Для именования функций используются имена, состоящие из глаголов или существительных, первая буква слова — заглавная.

В статье использована информация из MSDN и windef.h

Dmitri Alenitchev, Copyright &#169 2004

Типы данных Windows

Типы данных, поддерживаемые Windows, используются для определения возвращаемых значений функций, параметров функции и сообщения, а также элементов структуры. Они определяют размер и значение этих элементов. Дополнительные сведения о базовых типах данных C/C++ см. в разделе Диапазоны типов данных.

Следующая таблица содержит следующие типы: символ, целое число, логическое значение, указатель и дескриптор. Символьные, целочисленные и логические типы являются общими для большинства компиляторов C. Большинство имен типа указателя начинаются с префикса P или LP. Дескриптор ссылается на ресурс, загруженный в память.

Дополнительные сведения об обработке 64-разрядных целых чисел см. в разделе Большие целые числа.

Тип данных Описание
APIENTRY Соглашение о вызовах для системных функций.
Этот тип объявлен в WinDef.h следующим образом:
#define APIENTRY WINAPI
АТОМ Атом. Дополнительные сведения см. в разделе Сведения о таблицах Atom.
Этот тип объявлен в WinDef.h следующим образом:
typedef WORD ATOM;
BOOL Логическая переменная (должна иметь значение TRUE или FALSE).
Этот тип объявлен в WinDef.h следующим образом:
typedef int BOOL;
ЛОГИЧЕСКИХ Логическая переменная (должна иметь значение TRUE или FALSE).
Этот тип объявляется в WinNT.h следующим образом:
typedef BYTE BOOLEAN;
БАЙТ Байт (8 бит).
Этот тип объявлен в WinDef.h следующим образом:
typedef unsigned char BYTE;
ОБРАТНОГО ВЫЗОВА Соглашение о вызовах для функций обратного вызова.
Этот тип объявлен в WinDef.h следующим образом:
#define CALLBACK __stdcall
CALLBACK, WINAPI и APIENTRY используются для определения функций с помощью соглашения о вызовах __stdcall. Большинство функций в API Windows объявляются с помощью WINAPI. Вы можете использовать CALLBACK для функций обратного вызова, которые вы реализуете, чтобы помочь определить функцию как функцию обратного вызова.
CCHAR 8-разрядный символ Windows (ANSI).
Этот тип объявляется в WinNT.h следующим образом:
typedef char CCHAR;
CHAR 8-разрядный символ Windows (ANSI). Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.
Этот тип объявляется в WinNT.h следующим образом:
typedef char CHAR;
COLORREF Значение красного, зеленого, синего (RGB) цвета (32 бита). Сведения об этом типе см. в разделе COLORREF .
Этот тип объявлен в WinDef.h следующим образом:
typedef DWORD COLORREF;
CONST Переменная, значение которой будет оставаться постоянным во время выполнения.
Этот тип объявлен в WinDef.h следующим образом:
#define CONST const
DWORD 32-разрядное целое число без знака. Диапазон от 0 до 4294967295 десятичного числа.
Этот тип объявлен в IntSafe.h следующим образом:
typedef unsigned long DWORD;
DWORDLONG 64-разрядное целое число без знака. Диапазон от 0 до 18446744073709551615 десятичного числа.
Этот тип объявлен в IntSafe.h следующим образом:
typedef unsigned __int64 DWORDLONG;
DWORD_PTR Тип long без знака для точности указателя. Используется при приведение указателя к длинному типу для выполнения арифметики указателя. (Также часто используется для общих 32-разрядных параметров, которые были расширены до 64-разрядных параметров в 64-разрядной версии Windows.)
Этот тип объявлен в BaseTsd.h следующим образом:
typedef ULONG_PTR DWORD_PTR;
DWORD32 32-разрядное целое число без знака.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef unsigned int DWORD32;
DWORD64 64-разрядное целое число без знака.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef unsigned __int64 DWORD64;
ПЛАВАТЬ Переменная с плавающей запятой.
Этот тип объявлен в WinDef.h следующим образом:
typedef float FLOAT;
HACCEL Дескриптор таблицы ускорителя.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HACCEL;
HALF_PTR Половина размера указателя. Используйте в структуре, содержащей указатель и два небольших поля.
Этот тип объявлен в BaseTsd.h следующим образом:
#ifdef _WIN64 typedef int HALF_PTR; #else typedef short HALF_PTR; #endif

Этот тип объявляется в WinNT.h следующим образом:

typedef PVOID HANDLE;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HBITMAP;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HBRUSH;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HCOLORSPACE;

Дескриптор диалога динамического обмена данными (DDE).

Этот тип объявлен в Ddeml.h следующим образом:

typedef HANDLE HCONV;

Дескриптор списка бесед DDE.

Этот тип объявлен в Ddeml.h следующим образом:

typedef HANDLE HCONVLIST;

Этот тип объявлен в WinDef.h следующим образом:

typedef HICON HCURSOR;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HDC;

Дескриптор данных DDE.

Этот тип объявлен в Ddeml.h следующим образом:

typedef HANDLE HDDEDATA;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HDESK;

Дескриптор внутренней структуры удаления.

Этот тип объявлен в ShellApi.h следующим образом:

typedef HANDLE HDROP;

Дескриптор структуры отложенного положения окна.

Этот тип объявлен в WinUser.h следующим образом:

typedef HANDLE HDWP;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HENHMETAFILE;

Этот тип объявлен в WinDef.h следующим образом:

typedef int HFILE;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HFONT;

Дескриптор объекта GDI.

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HGDIOBJ;

Дескриптор глобального блока памяти.

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HGLOBAL;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HHOOK;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HICON;

Дескриптор экземпляра. Это базовый адрес модуля в памяти.

HMODULE и HINSTANCE на сегодняшний день одинаковы, но представляют разные вещи в 16-разрядной версии Windows.

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HINSTANCE;

Дескриптор раздела реестра.

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HKEY;

Идентификатор входного языкового стандарта.

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HKL;

Дескриптор локального блока памяти.

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HLOCAL;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HMENU;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HMETAFILE;

Дескриптор модуля. Это базовый адрес модуля в памяти.

HMODULE и HINSTANCE одинаковы в текущих версиях Windows, но в 16-разрядных версиях Windows они представляют разные элементы.

Этот тип объявлен в WinDef.h следующим образом:

typedef HINSTANCE HMODULE;

Дескриптор монитора дисплея.

Этот тип объявлен в WinDef.h следующим образом:

if(WINVER >= 0x0500) typedef HANDLE HMONITOR;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HPALETTE;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HPEN;

Коды возврата, используемые COM-интерфейсами. Дополнительные сведения см. в разделе Структура кодов ошибок COM. Чтобы проверить значение HRESULT , используйте макросы FAILED и SUCCEEDED .

Этот тип объявляется в WinNT.h следующим образом:

typedef LONG HRESULT;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HRGN;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HRSRC;

Дескриптор строки DDE.

Этот тип объявлен в Ddeml.h следующим образом:

typedef HANDLE HSZ;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE WINSTA;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE HWND;

32-разрядное знаковое целое число. Диапазон — от -2147483648 до десятичного 2147483647.

Этот тип объявлен в WinDef.h следующим образом:

typedef int INT;

Целочисленный тип со знаком для точности указателя. Используется при приведение указателя к целочисленной для выполнения арифметики указателя.

Этот тип объявлен в BaseTsd.h следующим образом:

#if defined(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR; #endif

8-битовое целое число со знаком.

Этот тип объявлен в BaseTsd.h следующим образом:

typedef signed char INT8;

16-разрядное знаковое целое число.

Этот тип объявлен в BaseTsd.h следующим образом:

typedef signed short INT16;

32-разрядное знаковое целое число. Диапазон — от -2147483648 до десятичного 2147483647.

Этот тип объявлен в BaseTsd.h следующим образом:

typedef signed int INT32;

64-разрядное целое число со знаком. Диапазон от -9223372036854775808 до 9223372036854775807 десятичного числа.

Этот тип объявлен в BaseTsd.h следующим образом:

typedef signed __int64 INT64;

Идентификатор языка. Дополнительные сведения см. в разделе Идентификаторы языка.

Этот тип объявляется в WinNT.h следующим образом:

typedef WORD LANGID;

Идентификатор языкового стандарта. Дополнительные сведения см. в разделе Идентификаторы языкового стандарта.

Этот тип объявляется в WinNT.h следующим образом:

typedef DWORD LCID;

Тип сведений о языковом стандарте. Список см. в разделе Константы сведений о языковом стандарте.

Этот тип объявлен в WinNls.h следующим образом:

typedef DWORD LCTYPE;

Идентификатор языковой группы. Список см. в разделе EnumLanguageGroupLocales.

Этот тип объявлен в WinNls.h следующим образом:

typedef DWORD LGRPID;

32-разрядное знаковое целое число. Диапазон — от -2147483648 до десятичного 2147483647.

Этот тип объявляется в WinNT.h следующим образом:

typedef long LONG;

64-разрядное целое число со знаком. Диапазон от -9223372036854775808 до 9223372036854775807 десятичного числа.

Этот тип объявляется в WinNT.h следующим образом:

#if !defined(_M_IX86) typedef __int64 LONGLONG; #else typedef double LONGLONG; #endif

Длинный тип со знаком для точности указателя. Используется при приведение указателя к длинному объекту для выполнения арифметики указателя.

Этот тип объявлен в BaseTsd.h следующим образом:

#if defined(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR; #endif

32-разрядное знаковое целое число. Диапазон — от -2147483648 до десятичного 2147483647.

Этот тип объявлен в BaseTsd.h следующим образом:

typedef signed int LONG32;

64-разрядное целое число со знаком. Диапазон от -9223372036854775808 до 9223372036854775807 десятичного числа.

Этот тип объявлен в BaseTsd.h следующим образом:

typedef __int64 LONG64;

Этот тип объявлен в WinDef.h следующим образом:

typedef LONG_PTR LPARAM;

Этот тип объявлен в WinDef.h следующим образом:

typedef BOOL far *LPBOOL;

Этот тип объявлен в WinDef.h следующим образом:

typedef BYTE far *LPBYTE;

Этот тип объявлен в WinDef.h следующим образом:

typedef DWORD *LPCOLORREF;

Указатель на константную строку, завершаемую null, из 8-разрядных символов Windows (ANSI). Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef __nullterminated CONST CHAR *LPCSTR;

LPCWSTR, если определен ЮНИКОД, или LPCSTR в противном случае. Дополнительные сведения см. в разделе Типы данных Windows для строк.

Этот тип объявляется в WinNT.h следующим образом:

#ifdef UNICODE typedef LPCWSTR LPCTSTR; #else typedef LPCSTR LPCTSTR; #endif

Указатель на константу любого типа.

Этот тип объявлен в WinDef.h следующим образом:

typedef CONST void *LPCVOID;

Указатель на константную строку, завершаемую null, из 16-разрядных символов Юникода. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef CONST WCHAR *LPCWSTR;

Этот тип объявлен в WinDef.h следующим образом:

typedef DWORD *LPDWORD;

Этот тип объявлен в WinDef.h следующим образом:

typedef HANDLE *LPHANDLE;

Этот тип объявлен в WinDef.h следующим образом:

typedef int *LPINT;

Этот тип объявлен в WinDef.h следующим образом:

typedef long *LPLONG;

Указатель на строку, завершаемую null, из 8-разрядных символов Windows (ANSI). Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef CHAR *LPSTR;

LPWSTR, если определен ЮНИКОД, в противном случае — LPSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.

Этот тип объявляется в WinNT.h следующим образом:

#ifdef UNICODE typedef LPWSTR LPTSTR; #else typedef LPSTR LPTSTR; #endif

Указатель на любой тип.

Этот тип объявлен в WinDef.h следующим образом:

typedef void *LPVOID;

Этот тип объявлен в WinDef.h следующим образом:

typedef WORD *LPWORD;

Указатель на строку, завершаемую null, из 16-разрядных символов Юникода. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef WCHAR *LPWSTR;

Подписанный результат обработки сообщения.

Этот тип объявлен в WinDef.h следующим образом:

typedef LONG_PTR LRESULT;

Этот тип объявлен в WinDef.h следующим образом:

typedef BOOL *PBOOL;

Этот тип объявляется в WinNT.h следующим образом:

typedef BOOLEAN *PBOOLEAN;

Этот тип объявлен в WinDef.h следующим образом:

typedef BYTE *PBYTE;

Этот тип объявляется в WinNT.h следующим образом:

typedef CHAR *PCHAR;

Указатель на константную строку, завершаемую null, из 8-разрядных символов Windows (ANSI). Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef CONST CHAR *PCSTR;

PCWSTR, если определен ЮНИКОД, в противном случае — PCSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.

Этот тип объявляется в WinNT.h следующим образом:

#ifdef UNICODE typedef LPCWSTR PCTSTR; #else typedef LPCSTR PCTSTR; #endif

Указатель на константную строку, завершаемую null, из 16-разрядных символов Юникода. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef CONST WCHAR *PCWSTR;

Этот тип объявляется в WinDef.h следующим образом:

typedef DWORD *PDWORD;

Этот тип объявляется в WinNT.h следующим образом:

typedef DWORDLONG *PDWORDLONG;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef DWORD_PTR *PDWORD_PTR;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef DWORD32 *PDWORD32;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef DWORD64 *PDWORD64;

Этот тип объявляется в WinDef.h следующим образом:

typedef FLOAT *PFLOAT;

Этот тип объявляется в BaseTsd.h следующим образом:

#ifdef _WIN64 typedef HALF_PTR *PHALF_PTR; #else typedef HALF_PTR *PHALF_PTR; #endif

Этот тип объявляется в WinNT.h следующим образом:

typedef HANDLE *PHANDLE;

Этот тип объявляется в WinDef.h следующим образом:

typedef HKEY *PHKEY;

Этот тип объявляется в WinDef.h следующим образом:

typedef int *PINT;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef INT_PTR *PINT_PTR;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef INT8 *PINT8;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef INT16 *PINT16;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef INT32 *PINT32;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef INT64 *PINT64;

Этот тип объявляется в WinNT.h следующим образом:

typedef PDWORD PLCID;

Этот тип объявляется в WinNT.h следующим образом:

typedef LONG *PLONG;

Этот тип объявляется в WinNT.h следующим образом:

typedef LONGLONG *PLONGLONG;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef LONG_PTR *PLONG_PTR;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef LONG32 *PLONG32;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef LONG64 *PLONG64;

32-разрядный указатель. В 32-разрядной системе это собственный указатель. В 64-разрядной системе это усеченный 64-разрядный указатель.

Этот тип объявляется в BaseTsd.h следующим образом:

#if defined(_WIN64) #define POINTER_32 __ptr32 #else #define POINTER_32 #endif

64-разрядный указатель. В 64-разрядной системе это собственный указатель. В 32-разрядной системе это 32-разрядный указатель со знаком.

Обратите внимание, что небезопасно предполагать состояние бита верхнего указателя.

Этот тип объявляется в BaseTsd.h следующим образом:

#if (_MSC_VER >= 1300) #define POINTER_64 __ptr64 #else #define POINTER_64 #endif

Этот тип объявляется в BaseTsd.h следующим образом:

#define POINTER_SIGNED __sptr

Указатель без знака.

Этот тип объявляется в BaseTsd.h следующим образом:

#define POINTER_UNSIGNED __uptr

Этот тип объявляется в WinNT.h следующим образом:

typedef SHORT *PSHORT;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef SIZE_T *PSIZE_T;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef SSIZE_T *PSSIZE_T;

Указатель на строку, завершаемую null, из 8-разрядных символов Windows (ANSI). Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef CHAR *PSTR;

Этот тип объявляется в WinNT.h следующим образом:

typedef TBYTE *PTBYTE;

Этот тип объявляется в WinNT.h следующим образом:

typedef TCHAR *PTCHAR;

PWSTR, если определен ЮНИКОД, в противном случае — PSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.

Этот тип объявляется в WinNT.h следующим образом:

#ifdef UNICODE typedef LPWSTR PTSTR; #else typedef LPSTR PTSTR; #endif

Этот тип объявлен в WinDef.h следующим образом:

typedef UCHAR *PUCHAR;

Этот тип объявлен в BaseTsd.h следующим образом:

#ifdef _WIN64 typedef UHALF_PTR *PUHALF_PTR; #else typedef UHALF_PTR *PUHALF_PTR; #endif

Этот тип объявлен в WinDef.h следующим образом:

typedef UINT *PUINT;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef UINT_PTR *PUINT_PTR;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef UINT8 *PUINT8;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef UINT16 *PUINT16;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef UINT32 *PUINT32;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef UINT64 *PUINT64;

Этот тип объявлен в WinDef.h следующим образом:

typedef ULONG *PULONG;

Этот тип объявлен в WinDef.h следующим образом:

typedef ULONGLONG *PULONGLONG;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef ULONG_PTR *PULONG_PTR;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef ULONG32 *PULONG32;

Этот тип объявлен в BaseTsd.h следующим образом:

typedef ULONG64 *PULONG64;

Этот тип объявлен в WinDef.h следующим образом:

typedef USHORT *PUSHORT;

Указатель на любой тип.

Этот тип объявляется в WinNT.h следующим образом:

typedef void *PVOID;

Этот тип объявляется в WinNT.h следующим образом:

typedef WCHAR *PWCHAR;

Этот тип объявлен в WinDef.h следующим образом:

typedef WORD *PWORD;

Указатель на строку, завершаемую null, из 16-разрядных символов Юникода. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef WCHAR *PWSTR;

64-разрядное целое число без знака.

Этот тип объявляется следующим образом:

typedef unsigned __int64 QWORD;

Дескриптор базы данных диспетчера управления службами. Дополнительные сведения см. в разделе Дескрипторы SCM.

Этот тип объявлен в WinSvc.h следующим образом:

typedef HANDLE SC_HANDLE;

Блокировка базы данных диспетчера управления службами. Дополнительные сведения см. в разделе Дескрипторы SCM.

Этот тип объявлен в WinSvc.h следующим образом:

typedef LPVOID SC_LOCK;

Дескриптор для значения состояния службы. Дополнительные сведения см. в разделе Дескрипторы SCM.

Этот тип объявлен в WinSvc.h следующим образом:

typedef HANDLE SERVICE_STATUS_HANDLE;

16-разрядное целое число. Диапазон от -32768 до десятичного числа 32767.

Этот тип объявляется в WinNT.h следующим образом:

typedef short SHORT;

Максимальное число байтов, на которое может указывать указатель. Используется для счетчика, который должен охватывать весь диапазон указателя.

Этот тип объявляется в BaseTsd.h следующим образом:

typedef ULONG_PTR SIZE_T;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef LONG_PTR SSIZE_T;

WCHAR, если определен ЮНИКОД, в противном случае — char.

Этот тип объявляется в WinNT.h следующим образом:

#ifdef UNICODE typedef WCHAR TBYTE; #else typedef unsigned char TBYTE; #endif

WCHAR, если определен ЮНИКОД, в противном случае — char.

Этот тип объявляется в WinNT.h следующим образом:

#ifdef UNICODE typedef WCHAR TCHAR; #else typedef char TCHAR; #endif

Этот тип объявляется в WinDef.h следующим образом:

typedef unsigned char UCHAR;

неподписанный HALF_PTR. Используйте в структуре, содержащей указатель и два небольших поля.

Этот тип объявляется в BaseTsd.h следующим образом:

#ifdef _WIN64 typedef unsigned int UHALF_PTR; #else typedef unsigned short UHALF_PTR; #endif

Неподписанный INT. Диапазон составляет от 0 до 4294967295 десятичной запятой.

Этот тип объявляется в WinDef.h следующим образом:

typedef unsigned int UINT;

Этот тип объявляется в BaseTsd.h следующим образом:

#if defined(_WIN64) typedef unsigned __int64 UINT_PTR; #else typedef unsigned int UINT_PTR; #endif

Этот тип объявляется в BaseTsd.h следующим образом:

typedef unsigned char UINT8;

Этот тип объявляется в BaseTsd.h следующим образом:

typedef unsigned short UINT16;

Неподписанный объект INT32. Диапазон составляет от 0 до 4294967295 десятичной запятой.

Этот тип объявляется в BaseTsd.h следующим образом:

typedef unsigned int UINT32;

Неподписанный объект INT64. Диапазон от 0 до 18446744073709551615 десятичной запятой.

Этот тип объявляется в BaseTsd.h следующим образом:

typedef unsigned __int64 UINT64;

Без знака LONG. Диапазон составляет от 0 до 4294967295 десятичной запятой.

Этот тип объявляется в WinDef.h следующим образом:

typedef unsigned long ULONG;

64-разрядное целое число без знака. Диапазон от 0 до 18446744073709551615 десятичной запятой.

Этот тип объявляется в WinNT.h следующим образом:

#if !defined(_M_IX86) typedef unsigned __int64 ULONGLONG; #else typedef double ULONGLONG; #endif

Этот тип объявляется в BaseTsd.h следующим образом:

#if defined(_WIN64) typedef unsigned __int64 ULONG_PTR; #else typedef unsigned long ULONG_PTR; #endif

Неподписанный объект LONG32. Диапазон составляет от 0 до 4294967295 десятичной запятой.

Этот тип объявляется в BaseTsd.h следующим образом:

typedef unsigned int ULONG32;

Неподписанный объект LONG64. Диапазон от 0 до 18446744073709551615 десятичной запятой.

Этот тип объявляется в BaseTsd.h следующим образом:

typedef unsigned __int64 ULONG64;

Этот тип объявлен в Winternl.h следующим образом:

typedef struct _UNICODE_STRING < USHORT Length; USHORT MaximumLength; PWSTR Buffer; >UNICODE_STRING; typedef UNICODE_STRING *PUNICODE_STRING; typedef const UNICODE_STRING *PCUNICODE_STRING;

Unsigned SHORT. Диапазон от 0 до 65535 десятичных разрядов.

Этот тип объявляется в WinDef.h следующим образом:

typedef unsigned short USHORT;

Порядковый номер обновления (USN).

Этот тип объявляется в WinNT.h следующим образом:

typedef LONGLONG USN;

Этот тип объявляется в WinNT.h следующим образом:

#define VOID void

16-разрядный символ Юникода. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.

Этот тип объявляется в WinNT.h следующим образом:

typedef wchar_t WCHAR;

Соглашение о вызовах для системных функций.

Этот тип объявляется в WinDef.h следующим образом:

#define WINAPI __stdcall

CALLBACK, WINAPI и APIENTRY используются для определения функций с помощью соглашения о вызовах __stdcall. Большинство функций в API Windows объявляются с помощью WINAPI. Вы можете использовать CALLBACK для функций обратного вызова, которые вы реализуете, чтобы помочь определить функцию как функцию обратного вызова.

16-разрядное целое число без знака. Диапазон от 0 до 65535 десятичных разрядов.

Этот тип объявляется в WinDef.h следующим образом:

typedef unsigned short WORD;

Этот тип объявляется в WinDef.h следующим образом:

typedef UINT_PTR WPARAM;

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Заголовок BaseTsd.h; WinDef.h; WinNT.h

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Отправить и просмотреть отзыв по

Типы данных в Win32 API

В WINAPI определено множество типов данных, так же, как и в C/С++ ( int , char , float и т.д.). Учить их определения не обязательно. Достаточно помнить, что они существуют, а когда они появятся или потребуются где-нибудь в программе, посмотреть их определения. В дальнейшем мы будем использовать их все. Условно их можно разделить на несколько видов: основные, дескрипторные, строковые и вспомогательные.

Основные типы

С основными типами данных трудностей возникнуть не должно. Если всё же возникнут, то нужно сюда.

BOOL – этот тип данных аналогичен bool . Он также имеет два значения – 0 или 1. Только при использовании WINAPI принято использовать вместо 0 спецификатор NULL . О нём ниже.

BYTE – байт, ну или восьмибитное беззнаковое целое число. Аналог – unsigned char .

DWORD — 32-битное беззнаковое целое. Аналоги: unsigned long int , UINT .

INT – 32-битное целое. Аналог – long int .

LONG – 32-битное целое – аналог всё также long int .

NULL – нулевой указатель. Вот его объявление:

void *NULL=0;

UINT – 32-битное беззнаковое целое. Аналоги: unsigned long int , DWORD .

Дескрипторные типы данных

Про дескрипторные типы немного рассказывалось на вводном уроке в WINAPI. Дескриптор, как говорилось ранее, — это идентификатор какого-либо объекта. Для разных типов объектов существуют разные дескрипторы. Дескриптор объекта можно описать так:

HANDLE h;

Есть также дескрипторы кисти, курсора мыши, шрифта и т.д. С их помощью мы можем при инициализации или в процессе работы приложения поменять какие-нибудь настройки, чего, например, мы не могли сделать в консольном приложении. Используются они в описательных функциях, управляющих типа: CreateProcess(), ShowWindow() и т.д. или как возвращаемое значение некоторых функций :

// получает дескриптор для устройства ввода или вывода: HANDLE h = GetStdHandle(DWORD nStdHandle);

В этой функции мы получили дескриптор считывания потоков std_in и std_out. И можем, например, его использовать в каком-нибудь условии.

Не будем вдаваться в физику создания дескрипторов. Разве что, при необходимости или для большего понимания процессов.

Примечание: для удобства в WINAPI предусмотрены сокращения для типов данных. Первая буква H – означает, что это дескриптор, от слова handle.

HANDLE – дескриптор объекта.

HBITMAP – дескриптор растрового изображения. От фразы handle bitmap.

HBRUSH – дескриптор кисти. От фразы handle brush.

HCURSOR – дескриптор курсора. От фразы handle cursor.

HDC – дескриптор контекста устройства. От фразы handle device context.

HFONT – дескриптор шрифта. От фразы handle font.

HICONS – дескриптор криптограммы. От фразы handle icons.

HINSTANCE – дескриптор экземпляра приложения. От фразы handle instance.

HMENU – дескриптор меню. От фразы handle menu.

HPEN – дескриптор пера. От фразы handle pen.

HWND – дескриптор окна. От фразы handle window.

Строковые типы данных

Для начала начнём, с того, какие кодировки существуют в Windows ОС.

Есть два вида кодировок символов: ANSI и UNICODE. Однобайтные символы относятся к ANSI, двухбайтные — к кодировке UNICODE. Мы можем с лёгкостью подключить UNICODE кодировку в свойствах проекта. И тогда в коде создать переменную типа char можно будет так:

// создаём строку из 10 элементов: wchar_t str[10];

Если же мы хотим использовать кодировку ANSI, то мы традиционно напишем:

// тоже создаём строку из 10 элементов: char str[10];

В WINAPI, в зависимости от того, подключён юникод или нет, используются два вида строк UNICODE-ные или TCHAR-ные. Ниже описаны строковые типы данных.

Всё также для удобства, первые две буквы LP – от фразы long pointer сигнализируют о том, что это указатель.

LPCSTR – указатель на константную строку, заканчивающуюся нуль-терминатором. От фразы long pointer constant string.

LPCTSTR – указатель на константную строку, без UNICODE. От фразы long pointer constant TCHAR string. Это надстройка функции LPCSTR.

LPCWSTR – указатель на константную UNICODE строку. От фразы фразы long pointer constant wide character string. Это надстройка функции LPCSTR.

LPSTR – указатель на строку, заканчивающуюся нуль-терминатором. От фразы long pointer string.

LPTSTR – указатель на строку, без UNICODE. От фразы long pointer TCHAR string. Это надстройка функции LPSTR.

LPWSTR – указатель на UNICODE строку. От фразы long pointer wide character string. Это надстройка функции LPSTR.

TCHAR – символьный тип — аналог char и wchar_t.

Вспомогательные типы

Вспомогательные типы данных используются в некоторых функциях. В частности, параметры, описанные ниже, используются при работе с функцией обратного вызова оконной процедуры такого вида:

LRESULT CALLBACK ИмяФункции(HWND hWnd, UINT uMSg, WPARAM wParam, LPARAM lParam);

Работа с данной функцией будет в следующих разделах.

LPARAM – тип для описания lParam (long parameter). Используются вместе с wparam в некоторых функциях.

LRESULT – значение, возвращаемое оконной процедурой имеет тип long .

WPARAM – тип для описания wParam (word parameter). Используются вместе с lParam в некоторых функциях.

На этом типы данных не закончены. В дальнейшем мы обязательно будем обращаться к данной статье.

Дата: 11.02.2014
Поделиться:

  • ←Введение в Win32 API
  • Создание полноценной оконной процедуры в Win32 API (Часть 1)→

Комментарии

npavelFax

14.02.2017 Работа в интернете официальная работа. Войдите, чтобы ответить

Gosha

21.05.2014 >В WINAPI, в зависимости от того, подключён юникод или нет, используются два вида строк UNICODE-ные или TCHAR-ные. Ниже описаны строковые типы данных.
Это не так.
Если объявлен UNICODE, то TCHAR двухбайтовый символ, если нет, то TCHAR это однобайтовый символ.
Он нужен для того чтобы написать универсальную программу, которую без переделки кода можно было бы компилировать как с использование UNICODE, так и без. И больше не для чего. А так без него можно обойтись, как в UNICODE, так и в ANSI программах.
Поэтому если используете TCHAR, то имеет смысл и весь код делать в стиле работы с TCHAR. Не надо делать так, если объявлен UNICODE:
TCHAR mainMessage[] = L»Какой то-текст!»;
И не надо делать так, если не объявлен UNICODE:
TCHAR mainMessage[] = «Какой то-текст!»;
Надо всегда делать так:
TCHAR mainMessage[] = TEXT(«Какой то-текст!»);//Эта строка без переделки будет компилирваться как с UNICODE, так и без.
Также и когда напрямую подставлются значения в функцию:
MessageBox(hwndDlg, TEXT(«Это сообщение»), TEXT(«Ошибка»), MB_OK); Войдите, чтобы ответить

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.

�� Rust Journey: Хотите освоить язык программирования, который завоевывает мир?

�� Илон Маск, один из ведущих инноваторов нашего времени, утверждает, что за Rust будущее. А когда последний раз он ошибался в своих прогнозах? ��

✨ Не упустите свой шанс быть в авангарде IT-революции. Подписывайтесь на канал Rust Journey и начните свой путь в захватывающий мир Rust сегодня!

Visual C++. что означает «DWORD» что это за тип, что хранит и для чего нужен? може в иннете где статейка есть про него.

Это ассемблерное двойное слово (дабл ворд) . Его размер зависит от архитектуры машины, на современных — 8 байт, т. е. как сишный лонг (к сожалению, не могу написать латиницей) . Если не ошибаюсь, то это дефайн лонга, по крайней мере в вижуалке.

Прочитать про двойное слово как таковое можно в любом учебнике языка Ассемблер, но нужно ли вам это?

Остальные ответы

Нафига статейка? Это 4 байта без знака, т. е. число от 0 до 2^32-1

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *