Тип данных word c: Спецификаторы формата для типов данных BYTE, WORD и DWORD на языке c?

Содержание

Типы данных Windows (BaseTsd.h) — Win32 apps

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

C++
#ifdef _WIN64
 typedef int HALF_PTR;
#else
 typedef short HALF_PTR;
#endif
СПРАВИТЬСЯ

Маркер объекта.

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

typedef PVOID HANDLE;

хбитмап

Маркер точечного рисунка.

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

typedef HANDLE HBITMAP;

хбруш

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

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

typedef HANDLE HBRUSH;

хколорспаце

Маркер цветового пространства.

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

typedef HANDLE HCOLORSPACE;

хконв

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

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

typedef HANDLE HCONV;

хконвлист

Маркер для списка сеансов DDE.

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

typedef HANDLE HCONVLIST;

хкурсор

Указатель на курсор.

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

typedef HICON HCURSOR;

HDC

Маркер контекста устройства (DC).

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

typedef HANDLE HDC;

хддедата

Обработчик данных DDE.

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

typedef HANDLE HDDEDATA;

хдеск

Маркер рабочего стола.

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

typedef HANDLE HDESK;

HDROP

Маркер внутренней структуры перетаскивания.

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

typedef HANDLE HDROP;

хдвп

Указатель на структуру отложенной позицией окна.

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

typedef HANDLE HDWP;

хенхметафиле

Маркер расширенного метафайла.

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

typedef HANDLE HENHMETAFILE;

HFILE

Обработчик для файла, открытого с помощью OpenFile, а не CreateFile.

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

typedef int HFILE;

хфонт

Маркер для шрифта.

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

typedef HANDLE HFONT;

хгдиобж

Маркер объекта GDI.

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

typedef HANDLE HGDIOBJ;

хглобал

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

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

typedef HANDLE HGLOBAL;

ххук

Маркер обработчика.

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

typedef HANDLE HHOOK;

хикон

Маркер для значка.

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

typedef HANDLE HICON;

HINSTANCE

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

Хмодуле и HINSTANCE уже сегодня, но в 16-разрядных Windows представлены различные вещи.

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

typedef HANDLE HINSTANCE;

HKEY

Маркер раздела реестра.

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

typedef HANDLE HKEY;

HKL

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

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

typedef HANDLE HKL;

хлокал

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

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

typedef HANDLE HLOCAL;

HMENU

Маркер меню.

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

typedef HANDLE HMENU;

хметафиле

Маркер для метафайла.

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

typedef HANDLE HMETAFILE;

хмодуле

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

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

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

typedef HINSTANCE HMODULE;

хмонитор

Маркер монитора.

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

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

хпалетте

Маркер для палитры.

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

typedef HANDLE HPALETTE;

хпен

Указатель на перо.

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

typedef HANDLE HPEN;

СОСТАВ

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

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

typedef LONG HRESULT;

хргн

Маркер для региона.

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

typedef HANDLE HRGN;

хрсрк

Маркер ресурса.

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

typedef HANDLE HRSRC;

хсз

Маркер строки DDE.

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

typedef HANDLE HSZ;

хвинста

Обработчик оконной станции.

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

typedef HANDLE WINSTA;

HWND

Маркер окна.

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

typedef HANDLE HWND;

INT

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

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

typedef int INT;

INT_PTR

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

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

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

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

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

typedef signed char INT8;

INT16

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

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

typedef signed short INT16;

ТИПА

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

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

typedef signed int INT32;

INT64

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

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

typedef signed __int64 INT64;

НАДЕЖНО

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

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

typedef WORD LANGID;

НАМНОГО

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

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

typedef DWORD LCID;

LCTYPE

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

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

typedef DWORD LCTYPE;

лгрпид

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

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

typedef DWORD LGRPID;

ПОДДЕРЖИВАЕМ

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

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

typedef long LONG;

лонглонг

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

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

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

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

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

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

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

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

typedef signed int LONG32;

LONG64

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

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

typedef __int64 LONG64;

LPARAM

Параметр сообщения.

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

typedef LONG_PTR LPARAM;

лпбул

Указатель на логическоезначение.

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

typedef BOOL far *LPBOOL;

LPBYTE

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

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

typedef BYTE far *LPBYTE;

лпколорреф

Указатель на значение COLORREF .

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

typedef DWORD *LPCOLORREF;

LPCSTR

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

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

typedef __nullterminated CONST CHAR *LPCSTR;

LPCTSTR

Лпквстр , если определен Юникод , LPCSTR в противном случае. дополнительные сведения см. в разделе Windows типы данных для строк.

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

C++
#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif
лпквоид

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

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

typedef CONST void *LPCVOID;

лпквстр

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

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

typedef CONST WCHAR *LPCWSTR;

лпдворд

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

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

typedef DWORD *LPDWORD;

лфандле

Указатель на маркер.

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

typedef HANDLE *LPHANDLE;

лпинт

Указатель на тип int.

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

typedef int *LPINT;

лплонг

Указатель на значение типа Long.

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

typedef long *LPLONG;

LPSTR

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

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

typedef CHAR *LPSTR;

LPTSTR

LPWSTR , если определен Юникод , LPSTR в противном случае. дополнительные сведения см. в разделе Windows типы данных для строк.

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

C++
#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif
лпвоид

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

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

typedef void *LPVOID;

лпворд

Указатель на слово.

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

typedef WORD *LPWORD;

LPWSTR

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

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

typedef WCHAR *LPWSTR;

LRESULT

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

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

typedef LONG_PTR LRESULT;

пбул

Указатель на логическоезначение.

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

typedef BOOL *PBOOL;

пбулеан

Указатель на логическое значение.

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

typedef BOOLEAN *PBOOLEAN;

пбите

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

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

typedef BYTE *PBYTE;

пчар

Указатель на символ.

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

typedef CHAR *PCHAR;

пкстр

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

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

typedef CONST CHAR *PCSTR;

пктстр

Пквстр , если определен Юникод , пкстр в противном случае. дополнительные сведения см. в разделе Windows типы данных для строк.

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

C++
#ifdef UNICODE
 typedef LPCWSTR PCTSTR;
#else
 typedef LPCSTR PCTSTR;
#endif
пквстр

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

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

typedef CONST WCHAR *PCWSTR;

пдворд

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

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

typedef DWORD *PDWORD;

пдвордлонг

Указатель на объекта dwordlong.

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

typedef DWORDLONG *PDWORDLONG;

PDWORD_PTR

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

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

typedef DWORD_PTR *PDWORD_PTR;

PDWORD32

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

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

typedef DWORD32 *PDWORD32;

PDWORD64

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

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

typedef DWORD64 *PDWORD64;

пфлоат

Указатель на число с плавающей запятой.

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

typedef FLOAT *PFLOAT;

PHALF_PTR

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

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

C++
#ifdef _WIN64
 typedef HALF_PTR *PHALF_PTR;
#else
 typedef HALF_PTR *PHALF_PTR;
#endif
фандле

Указатель на маркер.

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

typedef HANDLE *PHANDLE;

фкэй

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

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

typedef HKEY *PHKEY;

КОМАНДУ

Указатель на тип int.

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

typedef int *PINT;

PINT_PTR

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

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

typedef INT_PTR *PINT_PTR;

PINT8

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

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

typedef INT8 *PINT8;

PINT16

Указатель на значение INT16.

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

typedef INT16 *PINT16;

PINT32

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

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

typedef INT32 *PINT32;

PINT64

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

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

typedef INT64 *PINT64;

плЦид

Указатель на код языка.

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

typedef PDWORD PLCID;

плонг

Указатель на значение типа Long.

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

typedef LONG *PLONG;

плонглонг

Указатель на лонглонг.

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

typedef LONGLONG *PLONGLONG;

PLONG_PTR

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

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

typedef LONG_PTR *PLONG_PTR;

PLONG32

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

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

typedef LONG32 *PLONG32;

PLONG64

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

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

typedef LONG64 *PLONG64;

POINTER_32

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

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

C++
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
POINTER_64

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

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

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

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

Указатель со знаком.

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

#define POINTER_SIGNED __sptr

POINTER_UNSIGNED

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

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

#define POINTER_UNSIGNED __uptr

пшорт

Указатель на короткий.

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

typedef SHORT *PSHORT;

PSIZE_T

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

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

typedef SIZE_T *PSIZE_T;

PSSIZE_T

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

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

typedef SSIZE_T *PSSIZE_T;

пстр

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

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

typedef CHAR *PSTR;

птбите

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

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

typedef TBYTE *PTBYTE;

птчар

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

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

typedef TCHAR *PTCHAR;

птстр

Пвстр , если определен Юникод , ПСТР в противном случае. дополнительные сведения см. в разделе Windows типы данных для строк.

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

C++
#ifdef UNICODE
 typedef LPWSTR PTSTR;
#else typedef LPSTR PTSTR;
#endif
пучар

Указатель на Учар.

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

typedef UCHAR *PUCHAR;

PUHALF_PTR

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

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

C++
#ifdef _WIN64
 typedef UHALF_PTR *PUHALF_PTR;
#else
 typedef UHALF_PTR *PUHALF_PTR;
#endif
пуинт

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

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

typedef UINT *PUINT;

PUINT_PTR

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

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

typedef UINT_PTR *PUINT_PTR;

PUINT8

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

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

typedef UINT8 *PUINT8;

PUINT16

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

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

typedef UINT16 *PUINT16;

PUINT32

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

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

typedef UINT32 *PUINT32;

PUINT64

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

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

typedef UINT64 *PUINT64;

пулонг

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

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

typedef ULONG *PULONG;

пулонглонг

Указатель на улонглонг.

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

typedef ULONGLONG *PULONGLONG;

PULONG_PTR

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

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

typedef ULONG_PTR *PULONG_PTR;

PULONG32

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

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

typedef ULONG32 *PULONG32;

PULONG64

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

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

typedef ULONG64 *PULONG64;

пушорт

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

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

typedef USHORT *PUSHORT;

PVOID

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

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

typedef void *PVOID;

пвчар

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

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

typedef WCHAR *PWCHAR;

пворд

Указатель на слово.

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

typedef WORD *PWORD;

пвстр

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

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

typedef WCHAR *PWSTR;

QWORD

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

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

typedef unsigned __int64 QWORD;

SC_HANDLE

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

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

typedef HANDLE SC_HANDLE;

SC_LOCK

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

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

typedef LPVOID SC_LOCK;

SERVICE_STATUS_HANDLE

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

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

typedef HANDLE SERVICE_STATUS_HANDLE;

ПРОМЕЖУТОК

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

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

typedef short SHORT;

SIZE_T

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

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

typedef ULONG_PTR SIZE_T;

SSIZE_T

Подписанная версия SIZE_T.

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

typedef LONG_PTR SSIZE_T;

тбите

Значение WCHAR , если задан Юникод , в противном случае — символ .

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

C++
#ifdef UNICODE
 typedef WCHAR TBYTE;
#else
 typedef unsigned char TBYTE;
#endif
ГОЛОВК

Значение WCHAR , если задан Юникод , в противном случае — символ .

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

C++
#ifdef UNICODE
 typedef WCHAR TCHAR;
#else
 typedef char TCHAR;
#endif
учар

Знакбез знака.

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

typedef unsigned char UCHAR;

UHALF_PTR

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

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

C++
#ifdef _WIN64
 typedef unsigned int UHALF_PTR;
#else
 typedef unsigned short UHALF_PTR;
#endif
UINT

Целое число без знака. Диапазон — от 0 до 4294967295 десятичных знаков.

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

typedef unsigned int UINT;

UINT_PTR

INT_PTRбез знака.

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

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

INT8без знака.

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

typedef unsigned char UINT8;

UINT16

Неподписанная INT16.

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

typedef unsigned short UINT16;

ЗНАЧЕНИЕМ

Int32без знака. Диапазон — от 0 до 4294967295 десятичных знаков.

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

typedef unsigned int UINT32;

UINT64

Int64без знака. Диапазон — от 0 до 18446744073709551615 Decimal.

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

typedef usigned __int 64 UINT64;

ULONG

Длинноецелое без знака. Диапазон — от 0 до 4294967295 десятичных знаков.

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

typedef unsigned long ULONG;

улонглонг

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

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

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

LONG_PTRбез знака.

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

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

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

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

typedef unsigned int ULONG32;

ULONG64

Неподписанный LONG64. Диапазон — от 0 до 18446744073709551615 Decimal.

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

typedef unsigned __int64 ULONG64;

UNICODE_STRING

Строка Юникода.

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

C++
typedef struct _UNICODE_STRING {
  USHORT  Length;
  USHORT  MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING;
typedef UNICODE_STRING *PUNICODE_STRING;
typedef const UNICODE_STRING *PCUNICODE_STRING;
USHORT

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

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

typedef unsigned short USHORT;

ЖУРНАЛЫ

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

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

typedef LONGLONG USN;

VOID

Любой тип.

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

#define VOID void

WCHAR

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

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

typedef wchar_t WCHAR;

WINAPI

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

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

#define WINAPI __stdcall

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

СЛОВАМ

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

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

typedef unsigned short WORD;

WPARAM

Параметр сообщения.

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

typedef UINT_PTR WPARAM;

Zlyden Articles — Типы данных и переменные для программирования под Windows


Доброй ночи, сегодня я хочу рассказать о типах данных и именах переменных при
программировании под 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

Информатик БУ — Типы данных Pascal

Pascal – язык со строгой типизацией переменных. Это значит, что мы обязательно должны указывать тип каждой переменной, и не можем присвоить переменной одного типа значение другого типа (если только они не эквивалентны).

В качестве примера возьмем часть программы, которая вычисляет площадь круга по заданному радиусу:

S := r*r*3.14;

Если мы укажем, что у переменной S целочисленный тип, программа будет работать не верно, так как результатом выражения r*r*3.14  будет дробь, и присвоить целочисленной переменной дробное значение мы не можем.

Еще один пример. Программа складывает значение двух переменных:

a := 5;

b := 4;

c := a+b;

Если мы укажем, что a, b и c являются числами, то вполне логично предположить, что после выполнения программы значение c станет равно 9-ти. Но что будет, если a и b являются не числами, а простыми символами, а c – строкой?

a := ‘5’;

b := ‘4’;

c := a+b;

В этом случае мы не можем сложить математически два значения (ну правда, мы же не можем математически сложить две буквы), и символы просто подставятся друг к другу, то есть значение c будет равно ‘54’.

Кроме этого, после запуска программы для каждой переменной в оперативной памяти выделяется некоторое количество байт, которое зависит от типа этой переменной. И значения, которые может принять переменная, ограничены этим количеством байт. К примеру, переменной с типом данных byte выделяется 1 байт памяти, и она может принимать значения от 0 до 255, всего 256, что является количеством вариантов, которые можно закодировать одним байтом. Если же мы укажем для переменной тип byte, но присвоим ей значение, к примеру, 1000, программа работать не будет.

Целочисленные типы

Переменная целочисленного типа может принимать любое целое значение из диапазона значений этого типа. Также является порядковым типом.







ТипДлина (байт)Диапазон
byte10..255
shortint1-128..127
integer2-32768..32767
word20..65536
longint4-2147483648..2147483647

В заданиях ЕГЭ, как правило, достаточно использовать тип данных integer.

Вещественные типы

К вещественному типу относят дробные числа и числа с плавающей запятой. Тем не менее, мы можем присвоить вещественному типу целое значение.






ТипДлина (байт)Диапазон
single41.5*10-45 — 3.4*1038
real62.9*10-39 — 1.7*1038
double85*10-324 — 1.7*10308
extended103.4*10-4932 — 1.1*104932

В заданиях ЕГЭ, как правило, достаточно использовать тип данных real.

Символьный тип

Любой одиночный символ.



ТипДлина (байт)Диапазон
char1Любой символ кодировки ASCII

Переменной типа char можно присвоить любую букву, цифру, или любой другой символ стандартной кодировки. Также является порядковым типом.

Строковый тип

Если char — это только один символ, то строка — это набор символов. Строкой может быть, к примеру, слово, состоящее из нескольких букв. Также строки относят к структурным типам.



ТипДлина (байт)Диапазон
string256255 символов кодировки ASCII

Логический тип

Переменная логического типа может принимать только два значения: true или false (истина или ложь). Является порядковым типом.



ТипДлина (байт)Диапазон
boolean1true, false

Интервальный тип данных

Интервальный тип указывает, что переменная может принимать значения от одного значения, до другого. К примеру, мы знаем, что переменная может принимать значения только от 5 до 25. Мы можем объявить её тип так:

var

a: 5..25;

 

Программирование на языке Pascal — тест 2

Главная / Программирование /
Программирование на языке Pascal / Тест 2

Упражнение 1:


Номер 1

Тип данных real является

Ответ:

&nbsp(1) арифметическим&nbsp

&nbsp(2) базовым&nbsp

&nbsp(3) конструируемым&nbsp

&nbsp(4) порядковым &nbsp

&nbsp(5) структурированным &nbsp


Номер 2

Тип данных integer является

Ответ:

&nbsp(1) арифметическим&nbsp

&nbsp(2) базовым&nbsp

&nbsp(3) конструируемым&nbsp

&nbsp(4) порядковым &nbsp

&nbsp(5) структурированным &nbsp


Номер 3

Тип данных boolean является

Ответ:

&nbsp(1) арифметическим&nbsp

&nbsp(2) базовым&nbsp

&nbsp(3) конструируемым&nbsp

&nbsp(4) структурированным &nbsp


Упражнение 2:


Номер 1

Типы данных byte и shortint являются:

Ответ:

&nbsp(1) эквивалентными&nbsp

&nbsp(2) совместимыми&nbsp

&nbsp(3) совместимыми по присваиванию&nbsp


Номер 2

Типы данных double и real являются:

Ответ:

&nbsp(1) эквивалентными&nbsp

&nbsp(2) совместимыми&nbsp

&nbsp(3) совместимыми по присваиванию&nbsp


Номер 3

Типы данных real и integer являются:

Ответ:

&nbsp(1) эквивалентными&nbsp

&nbsp(2) несовместимыми&nbsp

&nbsp(3) совместимыми по присваиванию&nbsp


Упражнение 3:


Номер 1

Какой тип будет иметь результат выражения a+b при a:word, b:integer?

Ответ:

&nbsp(1) byte&nbsp

&nbsp(2) word&nbsp

&nbsp(3) shortint&nbsp

&nbsp(4) integer&nbsp

&nbsp(5) longint&nbsp


Номер 2

Какой тип будет иметь результат выражения a+b при a:byte, b:shortint?

Ответ:

&nbsp(1) byte&nbsp

&nbsp(2) word&nbsp

&nbsp(3) shortint&nbsp

&nbsp(4) integer&nbsp

&nbsp(5) longint&nbsp


Номер 3

Какой тип будет иметь результат выражения a+b при a:shortint, b:word?

Ответ:

&nbsp(1) byte&nbsp

&nbsp(2) word&nbsp

&nbsp(3) shortint&nbsp

&nbsp(4) integer&nbsp

&nbsp(5) longint&nbsp


Упражнение 4:


Номер 1

Какие из вариантов расстановки скобок в выражении
        a and b shr c mod a + c * a shl - b div a
        не меняют порядок выполнения операций?

Ответ:

&nbsp(1) (((a and b)shr c)mod a)+(c*((a shl(-b))div a))&nbsp

&nbsp(2) a and b shr c mod a +(((c*a)shl(-b))div a)&nbsp

&nbsp(3) ((a and b)shr c)mod a+c*(a shl -b div a)&nbsp

&nbsp(4) (a and(b shr(c mod a)))+(c*(a shl(-(b div a))))&nbsp

&nbsp(5) a and b shr c mod a+(c*(a shl((-b)div a)))&nbsp

&nbsp(6) a and b shr c mod a+((c*a) shl(-(b div a)))&nbsp


Номер 2

Какой из вариантов расстановки скобок в выражении
        a + b or c shl a * c - a mod b > a 
        не меняет порядок выполнения операций?

Ответ:

&nbsp(1) a+(((b or c)shl a)*c)-(a mod b)>a&nbsp

&nbsp(2) a+(b or((c shl a)*c))-a mod(b>a)&nbsp

&nbsp(3) a+(b or((c shl a)*c))-(a mod b)>a&nbsp

&nbsp(4) (a+b or c shl a*c-a mod b)>a&nbsp

&nbsp(5) (a+b or c shl a*c(-a)mod b)>a&nbsp


Номер 3

Какие из вариантов расстановки скобок в выражении
        a * b + not c > a mod c * a shl b xor a 
        не меняют порядок выполнения операций?

Ответ:

&nbsp(1) a*b+(not c)>(((a mod c)*a)shl b)xor a&nbsp

&nbsp(2) a*b+(not c)>(a mod((c*a)shl b))xor a&nbsp

&nbsp(3) ((((a*(b+not c)>a)mod c)*a)shl b)xor a&nbsp

&nbsp(4) (a*b+not c)>(a mod c*a shl b)xor a&nbsp

&nbsp(5) (a*b)+(not c)>(a mod c)*(a shl b)xor a&nbsp

&nbsp(6) (a*b)+(not c)>(a mod (c*(a shl(b xor a))))&nbsp


Pascal. Простые типы данных — Pascal

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

Простые типы делятся на стандартные (порядковые) и перечисляемые (ограниченные).

Стандартные типы

Турбо-Паскаль имеет четыре встроенных стандартных типа: integer (целое), real (вещественное), boolean (логический) и char (символьный).

Целочисленный тип (integer)

В Турбо-Паскале имеется пять встроенных целочисленных типов: shortint (короткое целое), integer (целое), longint (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей Таблице.

Встроенные целочисленные типы.







Тип

Диапазон

Формат

shortint

-128 ..+127

8 битов со знаком

integer

-32768 .. 32767

16 битов со знаком

longint

-2147483648 +2147483647

32 бита со знаком

byte

0 .. 255

8 битов без знака

word

0 .. 65535

16 битов без знака

Арифметические действия над операндами целочисленного типа осуществляются в соответствии со следующими правилами:

  1. Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
  2. В случае бинарной операции (операции, использующей два операнда), оба операнда преобразуются к их общему типу перед тем, как над ними совершается действие. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов. Например, общим типом для целого и целого длиной в байт является целое, а общим типом для целого и целого длиной в слово является длинное целое. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.
  3. Выражение справа в операторе присваивания вычисляется независимо от размера переменной слева.

Операции совершаемые над целыми числами:

“+” — сложение

“-“ — вычитание

“*” — умножение

SQR — возведение в квадрат

DIV — после деления отбрасывает дробную часть

MOD — получение целого остатка после деления

ABS — модуль числа

RANDOM(X)-получение случайного числа от 0 до Х

Пример:

а:=100; 
b:=60;
a DIV b результат - 1
а MOD b результат - 40

Описываются переменные целого типа следующим образом:

var список переменных: тип;

Например: var а,р,n:integer;

Вещественный тип(real)

К вещественному типу относится подмножество вещественных чисел, которые могут быть представлены в формате с плавающей запятой с фиксированным числом цифр. Запись значения в формате с плавающей запятой обычно включает три значения — m, b и e — таким образом, что m*bе, где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон и точность вещественного типа.

Имеется пять видов вещественных типов: real, singlе, duble, exnende, comp. Вещественные типы различаются диапазоном и точностью связанных с ними значений

Диапазон и десятичные цифры для вещественных типов



Тип

Диапазон

Цифры

Real

Single

Duble

Extende

comp

2.9×10Е-39 до 1.7×10Е 38

1.5×10Е-45 до 3.4×10Е 38

5.0×10Е-324 до 1.7×10Е 308

3.4×10Е-493 до 1.1×10Е 403

-2Е 63 до 2Е 63

от 11 до 12

от 7 до 8

от 15 до 16

от 19 до 20

от 19 до 20

Операции совершаемые над вещественными числами:

  • Все операции допустимые для целых чисел.
  • SQRT(x)-корень квадратный из числа х.
  • SIN(X), COS(X), ARCTAN(X).
  • LN(X)-натуральный логарифм.
  • EXP(X)-экспонента Х (ех).
  • EXP(X*LN(A))-возведение в степень (Ах).
  • Функции преобразования типов:
    • TRUNC(X)-отбрасывает дробную часть;
    • ROUND(X)-округление.
  • Некоторые правила арифметических операций:
    • Если в арифметическом действии встречаются числа типа real и integer, то результат будет иметь тип real.
    • Все составные части выражения записываются в одну строку.
    • Используются только круглые скобки.
    • Нельзя подряд ставить два арифметических знака.

Описываются переменные вещественного типа следующим образом:

var список переменных: тип;

Например:

var d,g,k:real;

Символьный тип(char)

K типу char относится любой символ заключенный в апострофы. Для представления апострофа как символьную переменную, надо заключить его в апостроф:’’’’.

Каждый символ имеет свой код и номер. Порядковые номера цифр 0,1..9 упорядочены по возрастанию. Порядковые номера букв также упорядочены по возрастанию, но не обязательно следуют друг за другом.

К символьным данным применимы знаки сравнения:

> , < , >=, <=, <> .

Например: ‘A’ < ‘W’

Функции, которые применимы к символьным переменным:

  1. ORD(X) — определяет порядковый номер символа Х.

    Пример:

    ord(‘a’)=97;

  2. CHR(X) — определяет символ по номеру.

    Пример:

    chr(97)=’a’;

  3. PRED(X) — выдает символ, стоящий перед символом Х.

    Пример:

    pred(‘B’)=’A’;

  4. SUCC(X) — выдает символ, следующий после символа Х.

    Пример:

    succ(‘A’)=’B’;

Перечислимый тип

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

Type <имя типа>=(список констант);
Var <имя переменной>:<имя типа>;
 

где <список констант> — это особый вид констант, задаваемых через запятую и имеющих свой порядковый номер, начиная с 0.

Например:

type
направление=(север, юг, запад, восток);
месяц=(июнь,июль,август,январь);
емкость=(ведро,бочка,канистра,бак);
var
поворот:направление;
отъезд:месяц;
объем:емкость;
 

или так:

var
поворот:(свер, юг, запад, восток);
отъезд:(июнь, июль, август, январь);
объем:(ведро, бочка, канистра, бак);
 

Можно выполнить такие операторы присваивания:

поворот:=юг;
отъезд:=август;
объем:=бак;

но нельзя выполнять смешанные присваивания:

отъезд:=юг;
объем:=август;
 

К переменным перечислимого типа применимы следующие функции:

1. ORD — порядковый номер

2. PRED — предшествующий элемент

3. SUCC — последующий элемент.

Пример:

PRED(бочка)=ведро; 
SUCC(юг)=запад; 
ORD(июль)=1;
 

Переменные перечислимого типа можно сравнить, так как они упорядочены и пронумерованы. Так выражения: север < юг, июнь < январь имеют значения TRUE, а юг>запад и бак<бочка значение FАLSE.

Ограниченный тип

Если переменная принимает не все значения своего типа, а только в некотором диапазоне, то ее можно рассматривать как переменную ограниченного типа. Каждый ограниченный тип задается путем накладывания ограничения на базовые типы.

Описывается так:

TYPE <имя типа>=константа1..константа2

При этом должны выполняться следующие правила:

  1. Обе ограниченные константы должны быть одного типа.
  2. В качестве базового типа можно использовать любой простой тип, кроме действительного(real).
  3. Начальные значение при определении ограниченного типа не должно быть больше конечного значения.

Пример:

type index=0..63;
letter=’a’..’z’; var char1,char2:letter;
a,g:index;

Можно описывать сразу в разделе описания переменных:

var a,g:0..63;
char1,char2:’a’..’z’.

Типы данных Delphi

Теперь обсудим типы данных Delphi, которые программист использует при написании программы. Любая программа на Delphi может содержать данные многих типов:

  • целые и дробные числа,
  • символы,
  • строки символов,
  • логические величины.

Целый тип Delphi

Библиотека языка Delphi включает в себя 7 целых типов данных: Shortint, Smallint, Longint, Int64, Byte, Word, Longword, характеристики которых приведены в таблице ниже.

Вещественный тип Delphi

Кроме того, в поддержку языка Delphi входят 6 различных вещественных типов (Real68, Single, Double, Extended, Comp, Currency), которые отличаются друг от друга, прежде всего, по диапазону допустимых значений, по количеству значащих цифр, по количеству байт, которые необходимы для хранения некоторых данных в памяти ПК (характеристики вещественных типов приведены ниже). Также в состав библиотеки  языка Delphi входит и наиболее универсальный вещественный тип — тип Real, эквивалентный Double.

Символьный тип Delphi

Кроме числовых типов, язык Delphi располагает двумя символьными типами:

Тип Ansichar  —  символы c кодировкой ANSI, им ставятся в соответствие числа от 0 до 255;

Тип Widechar —  символы с кодировкой Unicode,  им ставятся в соответствие числа  от 0 до 65 535.

Строковый тип Delphi

Строковый тип в Delphi обозначается идентификатором string. В языке Delphi представлены три строковых типа:

Тип Shortstring — присущ статически размещаемым в памяти ПК строкам, длина которых изменяется в диапазоне от 0 до 255 символов;

Тип Longstring — этим типом обладают динамически размещаемые в памяти ПК строки с длиной, ограниченной лишь объемом свободной памяти;

Тип WideString — тип данных, использующийся для того, чтобы держать необходимую последовательность Интернациональный символов, подобно целым предложениям. Всякий символ строки, имеющей тип WideString, представляет собой Unicode-символ.  В отличие от типа  Shortstring, тип  WideString является указателем, который ссылается на переменные.

Логический тип Delphi

Логический тип соответствует переменным, которые могут принять лишь одно из двух значений: true, false. В языке Delphi логические величины обладают типом Boolean. Вам были представлены основные типы данных Delphi. Движемся дальше.


Похожие записи:

Программирование контроллера simatic s 7-300 программирование панели человеко-машинного интерфейса tp -177 a

ГОУ ВПО Уральский
государственный технический университет
– УПИ имени первого Президента России
Б.Н. Ельцина

Кафедра «Электронное
машиностроение»

Программирование
контроллера
Simatic
S7-300

Программирование панели

человеко-машинного интерфейса
TP-177A

Методические
указания

к лабораторным
работам

по дисциплине
«Технические средства автоматизации»

для студентов
специальности

«Автоматизация
технологических процессов и производств»

Екатеринбург 2008

Описание лабораторного стенда

Лабораторный стенд выполнен на
базе оборудования промышленной
автоматизации фирмы Siemens
(Германия) и включает в себя программируемый
контроллер Simatic S7-300 CPU
313C
, сенсорную HMI-панель1TP-177A,
персональный компьютер, адаптер
интерфейсов USB-MPI
и панель имитатора объекта управления.

Рис.1. Функциональная схема
лабораторного стенда

Контроллер состоит из блока
питания PS-307
и процессорного модуля CPU-313C,
имеющего встроенные входы и выходы.
Блок питания преобразует напряжение
электрической сети 220 В переменного
тока в напряжение 24 В постоянного тока,
используемое для питания контроллера,
HMI-панели,
а также элементов имитатора объекта
управления. На передней панели блока
питания находится выключатель.

Всего модуль CPU-313C
имеет 24 дискретных входов, 16 дискретных
выходов, 5 аналоговых входов и 2 аналоговых
выхода. В лабораторных работах используется
3 дискретных входа (условно обозначим
их A,
B и
С), 3 дискретных выхода (условно обозначим
их X,
Y и
Z),
1 аналоговый вход (условно обозначим
его R)
и 1 аналоговый выход (условно обозначим
его H).
Дискретные логические сигналы (0/24 В)
подаются на входы A,
B,
C
от трёх переключателей П1, П2, П3
соответственно. Дискретные логические
сигналы (0/24 В) с выходов X,
Y,
Z
управляют лампами Л1, Л2, Л3 соответственно.
Аналоговый сигнал (0…10 В) приходит на
вход R
от реостата Р. Аналоговый сигнал (0…10
В) с выхода H
управляет микродвигателем постоянного
тока Д.

HMI-панель
получает питание (24 В) от блока PS-307
через отдельный тумблер (расположен
ниже панели). Панель может как отображать
информацию о работе управляемого
объекта, так и использоваться в качестве
задающего устройства. На экране HMI-панели
могут программироваться сенсорные
кнопки, чувствительные к прикосновению,
с помощью которых оператор системы
может подавать в контроллер управляющую
информацию.

Контроллер и HMI-панель
взаимодействуют друг с другом, через
последовательный интерфейс MPI
(выполненный на базе электрического
интерфейса RS-485).
Интерфейс MPI
является многоточечным, поэтому к общей
шине RS-485
кроме контроллера и HMI-панели
можно подключить третье устройство.
Таким устройством в лабораторном стенде
является персональный компьютер, который
используется как программатор контроллера
и HMI-панели
(поскольку компьютер не имеет интерфейса
MPI,
он подключается через адаптер USB-MPI).

Для разработки и загрузки программ
на компьютере установлено необходимое
программное обеспечение – пакет Step-7
Lite
(для программирования контроллеров
Simatic
S7-300)
и пакет WinCC
Flexible
(для программирования HMI-панелей,
в частности панели TP-177A).

Среда программирования Step-7
Lite

Проект в Step-7
Lite
состоит из собственно программы
контроллера и набора различных параметров,
связанных с его работой. В среде Step-7
Lite
можно создать новый проект или открыть
существующий проект (на рис.2 показан
вид рабочей среды Step-7
Lite
с открытым проектом).

Окно проекта (см.рис.2) содержит
ссылки на несколько страниц, в частности
Hardware
(страница аппаратной конфигурации
системы), Symbol
Table
(страница описания переменных программы),
Program
– папка модулей программы. На рис.2 в
этой папке содержится только один модуль
OB1
– это основной программный модуль,
который выполняется контроллером
циклически. Один цикл работы контроллера,
включающий в себя считывание входных
сигналов, выполнение модуля OB1
и установку выходных сигналов, называется
циклом сканирования. Время цикла
сканирования зависит от сложности
программы и обычно составляет от
нескольких миллисекунд до нескольких
десятков миллисекунд.

На рис.2 показано открытое окно
программы (модуля OB1).
В лабораторных работах программы будут
разрабатываться на языке Ladder
Logic
(лестничная логика). Элементы для
составления программы находятся в окне
библиотеки элементов и могут перетаскиваться
в окно программы с помощью мыши.

Основное
меню и кнопки управления

Окно связи с

контроллером

Окно программы

Окно проекта

Окно библиотеки элементов

Рис.2. Среда программирования
Step
7 Lite

Типы данных и адресация памяти
контроллера

Память данных контроллера
разделяется на несколько областей.
Входная память (I-память)
связана с дискретными входами контроллера.
В каждом цикле сканирования контроллер
автоматически считывает состояния
своих дискретных входов и записывает
информацию о них во I-память.
Выходная память (Q-память)
связана с дискретными выходами
контроллера. В каждом цикле сканирования
контроллер автоматически устанавливает
состояния выходных ключей в соответствии
с информацией записанной в Q-памяти.
Каждому дискретному входу (выходу)
соответствует отдельная ячейка входной
(выходной) памяти ёмкостью 1 бит. Такой
тип данных называется логическим (в
Step-7
он называется типом Bool).
В таблице 1 приведены адреса битовых
ячеек памяти, соответствующих дискретными
входам и выходам, которые используются
в лабораторном стенде.

Таблица 1

Условное
обозначение входа (выхода)

Адрес
в памяти контроллера

A

I125.3

B

I125.4

C

I125.5

X

Q125.0

Y

Q125.1

Z

Q125.2

Структура адреса битовой ячейки,
в которой хранятся данные типа Bool,
следующая – сначала записывается буква,
обозначающая область памяти, затем
номер байта этой области (байты нумеруются
с нуля), точка и номер бита в данном байте
(биты также нумеруются с нуля, поэтому
номер бита может быть 0…7).

Для хранения промежуточных
данных не связанных непосредственно с
входами м выходами контроллера можно
использовать M-память.
Принцип адресации отдельных битов
M-памяти
такой же как Q-памяти
и I-памяти
(например, M0.0,
M0.1
и т.д.).

Кроме типа Bool
используются и более сложные типы
данных. Тип Byte
занимает 1 байт памяти, данные этого
типа представляют собой целые числа в
диапазоне 0…255. Для адресации отдельных
байтов памяти записывается буква области
памяти, затем буква B
(говорящая о том, что адресуется 1 байт)
и номер байта – например (MB0,
MB1,
MB2
и т.д.).

Тип Word
представляет собой двухбайтное целое
число в диапазоне 0…65535. Вторая буква в
адресе для такого типа будет W,
а число представляет собой адрес первого
байта из двух – например, MW10
адресует данные типа Word,
которые расположены в байтах 10 и 11
M-памяти.

Тип Int
представляет собой двухбайтное целое
число со знаком в диапазоне –32768…32767.
Адресуется также как тип Word
(например, MW0,
MW2,
MW4
и т.д.). Следует помнить, что данные типов
Word
и Int
не всегда совместимы друг с другом.

Типы Dword
и Dint
представляет собой четырехбайтное
целое число без знака и со знаком
соответственно. Для адресации четырёх
байтов памяти второй буквой в адресе
записывается D,
а номер указывает на первый из четырёх
байтов (например, MD0,
MD4,
MD8
и т.д.).

Тип Real
представляет собой вещественное число
(записанное в формате с плавающей точкой)
и занимающее в памяти 4 байта. Адресация
данных типа Real
такая же, как типов Dword
и Dint
(например по адресу MD12
может находиться число любого из
4-байтных типов, занимающее байты 12, 13,
14, 15).

Аналоговый вход принимает
аналоговый сигнал (напряжение 0…10 В),
который подаётся на аналого-цифровой
преобразователь, формирующий двухбайтный
код типа Int.
Этот код записывается в PI-память.
Адрес двухбайтной ячейки памяти,
связанной с аналоговым входом R
– PIW752.
Аналоговый выход получает выходной
сигнал (напряжение 0…10 В) от цифро-аналогового
преобразователя, на входе которого
двухбайтный код типа Int.
Этот код берется из PQ-памяти.
Адрес двухбайтной ячейки памяти,
связанной с аналоговым выходом H
– PQW752.

В Step-7
возможна символическая адресация, т.е.
вместо записи адреса можно записывать
связанное с этим адресом имя (выбираемое
по усмотрению программиста). Для
установления связи имен и адресов
заполняется таблица Symbol
Table
(рис.3)

Рис.3. Пример таблицы Symbol
Table.

Программирование логических
выражений и триггеров

Программа контроллера разделяется
на блоки (Network),
которые выполняются последовательно
сверху вниз. Каждый блок начинается от
вертикальной линии. Принято, что на этой
линии всегда высокий уровень сигнала
(логическая единица). Чтобы запрограммировать
логическое выражение достаточно
использовать 2 вида контактов (нормально
разомкнутый и нормально замкнутый) и
катушку (см. рис. 4).

Рис.4. Программирование логического
выражения

Каждый контакт связан со своей
переменной типа Bool.
Значение этой переменной определяет
состояние контакта. Нормальное состояние
контакта – это состояние, когда его
переменная равна логическому нулю.
Когда переменная контакта равна
логической единице, состояние контакта
противоположно нормальному. Катушка
одним выводом подключается к контактной
схеме, а другим – к «земле», т.е. точке
с нулевым потенциалом. В зависимости
от состояния контактов на катушке может
оказаться высокое или низкое напряжение.
Соответственно переменной катушки
(тоже типа Bool)
будет присвоено значение логической
единицы или логического нуля.

При составлении схемы удобно
использовать кнопки, расположенные в
верхней части экрана рабочей среды
Step-7
(рис.5). Обратите внимание на кнопки
Branch
Open
и Branch
Closed.
С их помощью можно создавать параллельные
ветви схемы. Для удаления какой-либо
части схемы её необходимо выделить с
помощью мыши и нажать Delete.

Рис.5. Кнопки для составления
лестничной схемы.

Для вставки нового блока Network
используйте команду Insert
Network,
которую можно запустить из меню,
появляющегося при щелчке правой кнопкой
мыши. Чтобы удалить весь блок Network
выделите слово Network
щелчком мыши и нажмите Delete.

На рис.6 показан пример использования
элемента Not,
который позволяет выполнить инверсию
всего логического выражения.

Для программирования RS-триггера
используются включающая и выключающая
катушки (рис.7).

Рис.6. Программирование логического
выражения

Рис.7. Пример программировании
RS-триггера

Катушка установки (S-катушка)
при подаче на неё высокого
уровня напряжения установит свою
переменную в единицу (S-катушка
может только устанавливать в единицу,
но не может сбрасывать в ноль). Катушка
сброса (R-катушка)
при подаче на неё высокого
уровня напряжения сбросит свою переменную
в ноль (R-катушка
может только сбрасывать в ноль, но не
может устанавливать в единицу). Применение
S-катушки
и R-катушки
для одной и той же переменной позволяет
реализовать RS-триггер.
Так в примере на рис.7 переменная Z
будет установлена в 1 если хотя бы одна
их переменных A
или B
равна 1, и будет сброшена в ноль, если
переменная С равна единице. Если же
одновременно выполняются условия сброса
и установки, то приоритетнее окажется
тот блок Network,
который расположен ниже. Если в примере
на рис.7 A=1
и C=1,
то переменная Z
будет сброшена в ноль.

Рис.8. Пример использования
детекторов

положительного и отрицательного
фронта

Детектор положительного фронта
(P)
левым выводом подключается к контактной
схеме, а правым – к катушке. Переменная
детектора хранит значение сигнала на
левом выводе, которое было в предыдущем
цикле сканирования. Если в текущем цикле
на левом выводе 1, а в предыдущем был 0,
то это называется положительным фронтом
сигнала. В этом случае на правом выводе
будет установлена 1 (но только в одном
цикле, когда произошел переход входного
сигнала из 0 в 1). Детектор отрицательного
фронта (N)
устанавливает выходной сигнал в 1, если
происходит переход входного сигнала
из 1 в 0 (единица на выходе также сохраняется
только на 1 цикл).

Элементы сравнения

Элементы сравнения расположены
в папке Comparator
библиотеки элементов. Каждый элемент
сравнения имеет логический вход, два
входа сравниваемых величин и один
логический выход. Элементы сравнения
делятся по виду выполняемой операции:
EQ
– элемент, проверяющий равенство, NE
– элемент, проверяющий неравенство, GT
– элемент, проверяющий условие «больше»,
LT
– элемент, проверяющий условие «меньше»,
GE
– элемент, проверяющий условие «больше
или равно», LE
– элемент, проверяющий условие «меньше
или равно». Элементы сравнения также
делятся по типу сравниваемых данных: I
– для данных типа Int,
D –
для данных типа Dint,
R –
для данных типа Real.

Рис.9. Пример использования
элемента сравнения.

Так например (рис.9), элемент GE_I
– это элемент, проверяющий условие
«больше или равно» для данных типа Int.
Логический вход используется для
активизации элемента (если он подключен
непосредственно к линии высокого уровня
сигнала, то сравнение осуществляется
в каждом цикле сканирования). На логическом
выходе появляется результат сравнения
– 0, если условие ложно и 1, если оно
истинно. В примерен на рис.9 логическая
переменная, находящаяся по адресу M5.6
получит значение 1, если переменная типа
Int,
находящаяся по адресу MW26
имеет значение большее или равное 20 (в
противном случае M5.6
получит значение 0).

Пересылка данных и преобразование
типов

Для пересылки данных используется
элемент Move.
Этот элемент имеет логические вход и
выход, вход источника данных и выход
приёмника данных. На вход источника
данных может подключаться переменная
или константа, а на выход приёмника
данных только переменная. Операция
пересылки происходит при условии, что
на логический вход приходит сигнал 1.
Если операция выполнена, то 1 появляется
на логическом выходе. Таким образом,
элементы Move
можно соединять по цепочке, они будут
выполняться слева направо.

Рис.10. Пример пересылки данных
и преобразования типов

В примере на рис.10 целочисленной
переменной с адресом MW2
присваивается значение 23, а вещественной
переменной с адресом MD10
присваивается значение –1,2. Также рис.10
показывает пример преобразования типов.
Элемент Round
округляет вещественное число (переменная
MD14
типа Real)
до ближайшего целого. Результат
записывается в переменную MD50
типа Dint.
Следующий элемент Move
выполняет преобразование типа Dint
(переменная MD50)
в тип Int
(переменная MW0).

Различные элементы преобразования
типов находятся в папке Converter
библиотеки элементов.

Арифметические операции

Элементы арифметических операций
находятся в папках библиотеки элементов
Integer
fct.
(для целых чисел) и Floating
point
fct.
(для вещественных чисел). В число этих
элементов входят: ADD
– элемент сложения, SUB
– элемент вычитания, MUL
– элемент умножения, DIV
– элемент деления. Также в обозначении
элемента присутствует буква, обозначающая
тип данных для аргументов операции: I
– тип Int,
DI
– тип Dint,
R –
тип Real.
Перечисленные элементы имеют 2 входа
для аргументов операции и 1 выход для
результата, а также логический вход и
логический выход (назначение логических
входа и выхода такое же как у элемента
Move).
На рис.11 показан пример арифметической
операции с целыми числами.

Рис.11. Пример выполнения
арифметической операции

с целыми числами:

Таймер с задержкой включения

Таймер
программный элемент, предназначенный
для реализации временных задержек при
выполнении программы. Адрес таймера
записывается в виде буквы T
с номером таймера (0…255), например Т101,
Т102 и т.д. На рис.12 показан вид элемента
S_ODT
(таймер с задержкой включения) с пояснением
назначения входов и выходов и типа
данных на входах и выходах. Данный
таймер, а также другие виды таймеров
находятся в папке Timers
библиотеки элементов.

Время, которое будет отсчитывать
таймер, задаётся на входе TV
константой специального типа S5Time
(например, S5T#2S
– время 2 секунды, S5T#5S500МS
– время 5 секунд, 500 мс или 5,5 секунд).

Рис.12. Элемент «таймер с задержкой
включения».

Входы S,R
и выход Q
предназначены для логических сигналов.
В исходном состоянии на выходе Q
сигнал 0 (таймер сброшен). Таймер
активизируется (начинает отсчёт времени)
при условии положительного фронта
сигнала (переход от 0 к 1) на входе S
при условии, что на входе R
сигнал 0. Отсчет времени продолжается
при том же условии (на входе S
– 1, на входе R
– 0). Когда таймер отсчитает заданное
время, сигнал на выходе Q
станет равным 1 (таймер установлен).
Сброс таймера происходит в следующих
случаях. Когда сигнал на входе S
станет равным нулю, сигнал на выходе Q
также станет равным нулю (причём без
задержки по времени). Также сброс
произойдет если на вход R
придёт сигнал 1, причём если затем сигнал
на входе R
снова станет равным нулю, а сигнал на
входе S
остаётся равным 1, то таймер не
активизируется, т.к. не было положительного
фронта на входе S.
Если сигнал на входе S
станет равным 0 (или сигнал на входе R
станет равным 1), когда таймер активен
и производит отсчёт времени, то он
переходит в неактивное состояние, отсчёт
времени прекращается, на выходе Q
остаётся сигнал 0. Работу таймера поясняют
временные диаграммы (рис.13).

Рис.13. Временные диаграммы работы
таймера

Возрастающий счётчик

Счётчик
программный элемент, предназначенный
для подсчёта событий при выполнении
программы и запуска необходимых действий,
когда произойдет заданное число этих
событий. Адрес счётчика записывается
в виде буквы C
с номером (0…255), например С10, С12 и т.д. На
рис.14 показан вид элемента S_CU
(возрастающий счётчик) с пояснением
назначения входов и выходов и типа
данных на входах и выходах. Данный
счётчик, а также другие виды счётчиков
находятся в папке Counter
библиотеки элементов.

Рис.14. Элемент «возрастающий
счётчик».

Предустановленное значение
задаётся с помощью переменной типа Word
(в которую предварительно записывается
необходимое значение) или с помощью
константы (например, C#20
– значение 20, C#1
– значение 1). Если на входе S
будет положительный фронт сигнала
(установка счётчика), и при этом на входе
CU
сигнал 0, то текущее значение счётчика
становится равным предустановленному
значению. Если при установке счётчика
на входе CU
сигнал 1, то текущее значение счётчика
становится равным предустановленному
значению плюс единица.

При каждом положительном фронте
сигнала на входе CU
текущее значение счётчика увеличивается
на 1 (текущее значение не может возрастать
более 999). Если текущее значение счётчика
больше нуля, то на выходе Q
будет сигнал 1, а если текущее значение
счётчика равно нулю, то на выходе Q
будет сигнал 0.

Заготовка для создания проекта
в
Step-7
Lite

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

Проект заготовка имеет таблицу
переменных, которые можно использовать
при выполнении лабораторной работы
(рис.15).

Рис.15. Таблица переменных
проекта-заготовки

В первом блоке проекта-заготовки
Network
1 (рис.16) определяется значение логической
переменной FirstScan.
Данная переменная получает значение 1
в первом цикле сканирования (при запуске
программы) и значения 0 во всех последующих
циклах сканирования. Её можно использовать
для выполнения однократных действий в
самом начале работы контроллера.

Второй блок Network
2 (рис.16) используется для преобразования
кода аналогового входа R
в величину напряжения в вольтах. Результат
записывается в переменную Uin,
которая может использоваться далее в
программе.

Третий блок Network
3 (рис.16) используется для преобразования
вещественной переменной Uout
(куда предварительно должно быть записана
величина напряжения в вольтах) в код
который выводится на аналоговый выход
H.

Четвертый блок Network
4 (рис.16) преобразует величину времени
в секундах (переменная NumSec)
в формат S5Time
(переменная TimeS5).

Рис.16. Программные блоки
проекта-заготовки

Загрузка проекта Step-7
в контроллер.

Управление режимом работы
контроллера

Для загрузки проекта, созданного
в среде Step-7
Lite,
в контроллер необходимо включить питание
контроллера (перевести переключатель
на блоке питания в верхнее положение).
В результате должен загореться светодиод
DC
24 V
на блоке питания, а также светодиоды DC
5V
и STOP
на процессорном модуле CPU-313C
(переключатель режимов на процессорном
модуле находится в положении STOP).
Затем необходимо установить соединение
компьютера с контроллером с помощью
кнопки Connect
Online
(см. рис.17). Появится сообщение о том, что
соединение установлено. На панели связи
с контроллером в среде Step-7
Lite
загорится индикатор режима STOP
(см. рис.17). Окно проекта переключится
на страницу Online
CPU
где показываются модули проекта уже
загруженные в контроллер. Если загруженный
модуль не соответствует одноименному
модулю проекта, то это показывается
специальным значком (см. рис.17).

Рис.17. Фрагмент рабочей среды
Step-7
Lite

после установления связи с
контроллером

Загружать в контроллер можно
как все модули проекта сразу, так и
отдельные модули. Для загрузки отдельного
модуля (например модуля OB1)
по его названию на странице Online
CPU
следует выполнить щелчок правой кнопкой
мыши и в открывшемся меню выбрать команду
Download
to
CPU
(см. рис.18).

Рис.18. Загрузка модуля OB1
в контроллер

Для загрузки всех файлов проекта
можно воспользоваться кнопкой Download
(см.рис.17). После щелчка по этой кнопке
появится окно Download
to
CPU
(рис.19). Далее можно выбрать необходимые
модули для загрузки (или все модули,
щелкнув мышью по кнопке All)
и запустить процесс загрузки с помощью
кнопки Upload.

Рис.19. Окно загрузки проекта

После загрузки модулей проекта
в контроллер на странице Online
CPU
специальный значок (2 зеленых квадрата)
показывает, что загруженный модуль
совпадает одноименным с модулем проекта
(см. рис.20). После этого можно запускать
программу контроллера на выполнение,
для чего контроллер необходимо переключить
из режима STOP
в режим RUN
(переключатель на передней панели
процессорного модуля переводится в
верхнее положение, гаснет светодиод
STOP,
загорается светодиод RUN).
На панели связи с контроллером в среде
Step-7
Lite
также происходит переключение индикаторов
(см. рис.20).

Рис.20. Фрагменты рабочей среды
Step-7
Lite

после окончания загрузки проекта
и переключения в режим RUN

Если в дальнейшем потребуется
частое переключение контроллера из
режима RUN
в режим STOP,
то лучше не использовать переключатель
на контроллере, а переключаться из
рабочей среды Step-7
Lite
с помощью кнопок RUN
и STOP
(при этом переключатель на контроллере
должен всё время находиться в положении
RUN).

Основы работы с пакетом WinCC
Flexible

Пакет WinCC
Flexible
предназначен для программирования
HMI-панелей
фирмы Siemens,
в частности сенсорной панели TP177A.
На рис.21 показаны основные окна среды
разработки WinCC.

Проектирование интерфейса
HMI-панели
заключается в размещении на главном
экране необходимых объектов и установке
свойств этих объектов. Если на главном
экране разместить какой-либо объект и
выделить его, то в окне свойств будут
отображаться свойства этого объекта.
Окно свойств состоит из нескольких
страниц: General
(основные свойства), Properties
(свойства внешнего вида), Events
(события) и т.д. Из окон проекта главным
образом будут использоваться Main
Screen
(главный экран) и Tags
(тэги).

Тегом называется переменная,
имеющая имя и тип данных, связанная с
определённым объектом. Теги бывают
внешние и внутренние. Внешний тег связан
с определённой областью памяти
контроллера, связанного с HMI-панелью,
и предназначен для обмена информацией
между контроллером и HMI-панелью.
Внутренний тег используется только
внутри проекта HMI-панели
и не имеет связи с памятью контроллера.

Каждый тэг имеет следующие
свойства – Name
(имя – задаётся по усмотрению программиста),
Connection
(соединение – для внешних тегов в это
свойство задаётся имя соединения между
контроллером и HMI-панелью,
например Connection_1;
для внутренних тегов задаётся Internal
Tag),
Data
type
(тип данных, например Bool,
Int,
Word
и т.д.), Address
(адрес в памяти контроллера – только
для внешних тегов), Acquisition
Time
(время обновления – только для внешних
тегов; это время через которое HMI-панель
обновляет значение тега, связываясь с
контроллером).

Рис.21.
Среда разработки проекта WinCC
Flexible

Рис.22. Пример таблицы тэгов.

Некоторые объекты не имеют тегов.
Они выполняют информационно-декоративную
роль и предназначены для отображения
на экране панели неизменного текста и
графических изображений. К графическим
объектам относятся объекты Line
(линия), Ellipse
(эллипс), Cycle
(круг) и Rectangle
(прямоугольник). Для вывода текстовых
надписей можно использовать объект
Text
Field.
В окне свойств перечисленных объектов
можно установить их необходимый вид
(задать точные координаты их расположения
на экране, установить толщину линий,
цвет заливки, размер шрифта и т.д.).

Рис.23. Примеры объектов
текстово-графического оформления экрана

Рассмотрим объекты, используемые
для ввода и вывода данных.

Объект Switch
(переключатель) имеет
вид прямоугольной кнопки (рис. 24), которая
может находиться в двух состояниях –
нажатом и отжатом. Переключение
осуществляется прикосновением к
соответствующей области панели (сенсорное
воздействие). Основными свойствами
объекта Switch
(далее рассматриваем только переключатели
с текстовыми надписями) являются: Text
ON
(текст выводимый на переключателе в
нажатом состоянии), Text
OFF
(текст выводимый на переключателе в
отжатом состоянии), Tag
(имя тега – обычно это логическая
переменная, тэг должен быть предварительно
описан в таблице), Value
ON
(значение тэга во включенном состоянии
– для логического тэга это значение
1).

Рис.24. Внешний вид объекта Switch

Для объекта Switch
можно также установить реакцию на
определённые события. Для этого в окне
свойств необходимо переключиться на
страницу Events.
Такими событиями могут быть: Change
(изменение значения), Switch
on
(включение), Switch
off
(выключение). Для события (на той же
странице Events)
выбирается функция обработки события.
Рассмотрим, например, функцию Increase
Value
(увеличение значения). Выбрав эту функцию,
необходимо установить два её параметра:
Tag
(имя тега, значение которого будет
увеличиваться при наступившем событии),
Value
(величина, на которую будет увеличено
это значение).

Объект Button
(кнопка) по своему виду аналогичен
объекту Switch,
но в отличие от объекта Switch
обладает свойством самовозврата (т.е.
не фиксируется в нажатом положении).
Основные свойства текстовой кнопки:
Text
OFF
– выводимый текст в ненажатом состоянии,
Text
ON
– выводимый текст в нажатом состоянии.
Кнопка в отличие от переключателя не
имеет свойства Tag.
Тем не менее, она может воздействовать
на значения тегов через события. На
странице Events
окна свойств кнопки можно установить
для различных событий функции их
обработки. Обычно обработчик устанавливается
для события Click
(щелчок). Типичные функции обработки
событий для кнопки – Decrease
Value
(уменьшить значение), Increase
Value
(увеличить значение), Set
Value
(установить значение), Set
Bit
(установить бит в единицу), Reset
Bit
(сбросить бит в ноль).

Объект IO
Field
(поле ввода-вывода) также
имеет вид прямоугольника с текстом.
Рассмотрим использование этого объекта
для вывода значения переменной (для
этого его свойству Mode
необходимо установить значение Output).
В свойство Tag
записывается имя тэга, значение которого
будет отображаться. Свойство Format
Type
определяет формат вывода (можно выбрать
формат Decimal
– десятичный, Binary
– двоичный и т.д.). Свойство Format
Pattern
определяет количество символов в
выводимом значении (для вещественных
значений также положение десятичной
точки). Например, если выбрать Format
Pattern
999, то это означает трёхзначное число.

Объект Bar
(полоса) представляет собой графический
индикатор значения переменной (например
типа Int,
Word,
Real)
и может использоваться для того, чтобы
показать динамику изменения этого
значения (рис.25). Объект Bar
имеет шкалу и рабочую область. Значение
переменной показывается заполнением
рабочей области чёрным цветом. Важными
свойствами объекта Bar
являются Tag
(имя тэга связанного с объектом), Maximum
Value
(максимальное значение шкалы –
соответствует заполненной черным цветом
рабочей области), Minimum
Value
(минимальное значение шкалы – соответствует
пустой рабочей области). Кроме этого на
странице окна свойств Properties
/
Layout
можно изменить свойства Scale
Position
(положение шкалы) и Bar
Orientation
(ориентация объекта Bar),
а на странице Properties
/
Scale
можно определить вид
шкалы, а также убрать отображение шкалы
(сбросив флажок Display
Scale).

Рис.25. Варианты объекта Bar

Создание нового проекта WinCC

Для создания нового проекта в
WinCC
Flexible
предусмотрена команда меню Project
/
New.
Однако при выполнении лабораторных
работ эту команду использовать не
следует, поскольку заранее подготовлен
пустой проект с именем WinCC_Empty
(где уде установлены все необходимые
настройки соединения между HMI-панелью
и контроллером). Поэтому, чтобы начать
разработку нового проекта следует
открыть проект WinCC_Empty
и сохранить его в отдельную папку под
другим именем.

Компиляция и загрузка проекта
WinCC

После того, как проект разработан
в среде WinCC
Flexible,
его необходимо откомпилировать, то есть
преобразовать в код для последующей
загрузки в память HMI-панели.
Для полной компиляции всего проекта
используется команда Rebuild
All
из меню Project
/
Compiler
(рис.26). Полную компиляцию
следует выполнить, когда проект был
создан первый раз или когда проект был
открыт после работы с другим проектом.
Если полная компиляция уже выполнялась,
а в проект были внесены изменения, то
лучше использовать команду Check
Consistency
из того же меню (выполнение которой
занимает меньше времени).

Рис.26. Команды меню Compiler

При компиляции выводятся различные
сообщения о ходе компиляции. В итоге
должно быть выведено сообщение, что
компиляция прошла успешно. Если проект
содержит ошибки, то будут выведены
сообщения об ошибках, и такой проект
нельзя будет загрузить в память
HMI-панели.

Загрузка проекта осуществляется
следующим образом. Необходимо включить
тумблер питания HMI-панели
и дождаться появления стартового меню.
Сразу же после его появления необходимо
нажать на сенсорную кнопку Transfer.
Панель будет ожидать загрузки нового
проекта. После этого в WinCC
Flexible
следует запустить команду меню Project
/
Transfer
/
Transfer
settings
(появится окно, показанное на рис.27).
Для запуска процесса
загрузки необходимо щелкнуть мышью по
кнопке Transfer.

После загрузки проекта на
HMI-панели
сразу же отобразится главный экран
проекта, и проект будет готов к выполнению.

Рис.27. Окно загрузки проекта
WinCC

Техника безопасности при
выполнении работы

При выполнении работы студентам
запрещается
:

  • Выполнять любые действия на
    стенде, последствия которых неизвестны
    или которые не предусмотрены заданием.

  • Самостоятельно включать и
    выключать питание стенда.

  • Передвигать оборудование стенда
    по столу.

  • Отсоединять любые провода и
    кабели на стенде.

  • Запускать на компьютере любые
    программы, не относящиеся к лабораторным
    работам.

Задание к лабораторной работе
№ 1

«Программирование контроллера
Simatic
S7-300»

Бригаде студентов, выполняющих
лабораторную работу, следует:

1. Ознакомиться с общим устройством
лабораторного стенда и основами
разработки проектов в среде Step-7
Lite.

2. Открыть в Step-7
Lite
проект-заготовку Step7_Empty.
Создать рабочую папку и сохранить в неё
копию проекта Step7_Empty
(лучше под другим именем).

3. Разработать проект в соответствии
с заданием для определённого номера
варианта (указывается преподавателем).

4. Загрузить проект в контроллер
(питание стенда включается преподавателем).

5. Проверить работоспособность
программы контроллера и её соответствие
заданию. Показать результат преподавателю.

6. Ответить на вопросы преподавателя.

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

Вариант 1. При
включении переключателя П1 лампы Л1 и
Л2 должны попеременно мигать (сначала
3 секунды горит Л1, затем Л1 гаснет и 3
секунды горит Л2, затем Л2 гаснет и 3
секунды горит Л1 и т.д.). При выключении
переключателя П1 обе лампы Л1 и Л2 должны
погаснуть и больше включаться не должны.
При включении переключателя П2 лампа
Л3 должна мигать (5 секунд включена, 5
секунд выключена и т.д.). На период
включения лампы Л3 должен включаться
двигатель – на него подаётся напряжение
2 В плюс напряжение на аналоговом входе
R
(но не более 8 В). При выключении
переключателя П2 лампа Л3 и двигатель
должны выключиться и больше включаться
не должны.

Вариант 2. При
включении переключателя П1 лампа Л1
должна включаться попеременно с
двигателем (сначала 2 секунды горит Л1,
затем Л1 гаснет и 3 секунды работает
двигатель, затем двигатель останавливается
и снова 2 секунды горит Л1 и т.д.). При
выключении
переключателя П1 лампа Л1 и двигатель
должны выключиться и больше включаться
не должны. При включении одного из
переключателей П2 или П3 лампа Л3 должна
включиться, а затем погаснуть. Время на
которое включается лампа Л3 должно быть
равно 5 секундам, если напряжение на
аналоговом входе R
более 4 вольт, или 3 секундам, если
напряжение на аналоговом входе R
менее 4 вольт. Когда П1 и П2 будут выключены
лампа Л3 должна выключиться и включаться
больше не должна.

Вариант 3. При
включении переключателя П1 лампа Л1
должна включиться с задержкой 2 секунды,
а при выключении
переключателя П1 лампа Л1 должна также
выключиться с задержкой, причем время
задержки должно быть равно целому числу
вольт на аналоговом входе R.
Когда переключатели П2 и П3 оба включены,
двигатель должен работать циклически
(2 секунды на двигатель подаётся напряжение
3 В, следующие 2 секунды – напряжение 6
В и т.д.). В первую половину цикла должна
гореть лампа Л2, а во вторую половину –
лампа Л3. Если ходя бы один из переключателей
П2 или П3 выключен,
двигатель, Л2 и Л3 включаться не должны.

Вариант 4. При
включении любого из переключателей П1,
П2 или П3 лампы Л1 и Л2 должны работать в
мигающем режиме (сначала 2 секунды горит
Л1, затем 4 секунды одновременно горят
Л1 и Л2, затем 2 секунды горит Л2, затем
снова 4 секунды одновременно горят Л1 и
Л2 и т.д.). Если включены все три переключателя
П1, П2, П3, то когда лампы Л1 и Л2 горят
одновременно, должен работать двигатель.
Напряжение, подаваемое на двигатель,
должно быть в 2 раза больше напряжения
на аналоговом входе R,
но не должно превышать 9 В. Если все
переключатели выключены, двигатель и
лампы включаться не должны.

Вариант 5. При
включении переключателя П1 должен
запустится двигатель с задержкой в 2
секунды. Напряжение, подаваемое на
двигатель, должно быть таким же, как
напряжение на аналоговом входе R.
После этого каждое включение и каждое
выключение переключателя П2 должно
увеличивать напряжение на двигателе
на 1 В (вплоть до максимального значения
напряжения 10 В), а каждое включение и
каждое выключение переключателя П3
должно уменьшать напряжение на двигателе
на 0,5 В (вплоть до минимального напряжения
0 В). Изменение напряжения на аналоговом
входе R
должно на такую же величину изменять
напряжение на двигателе. При выключении
переключателя П1 двигатель должен
выключиться с задержкой в 5 секунд.

Задание к лабораторной работе
№ 2

«Программирование панели
человеко-машинного интерфейса
TP-177A»

Лабораторная работа № 2 может
быть выполнена только при условии
выполнения лабораторной работы № 1.

Бригаде студентов, выполняющих
лабораторную работу, следует:

1. Повторить общее устройство
лабораторного стенда и ознакомиться с
основами разработки проектов для
HMI-панелей
в среде WinCC
Flexible.

2. Открыть в WinCC
Flexuble
проект-заготовку WinCC_Empty.
Создать рабочую папку и сохранить в неё
копию проекта WinCC_Empty
(лучше под другим именем).

3. Разработать экран HMI-панели
для работы совместно с контроллером по
программе из предыдущей лабораторной
работы. Доработка самой программы
контроллера в Step-7
Lite
также потребуется.

Экран HMI-панели
должен содержать:

  • Поля вывода состояния ламп и
    двигателя (включены или выключены).

  • Сенсорные переключатели (или
    кнопки), дублирующие переключатели П1,
    П2, П3.

  • Поля вывода значений напряжения
    на аналоговом входе R
    и напряжения на двигателе в вольтах
    (можно использовать объекты Bar).

  • Поясняющие надписи.

4. Загрузить проект WinCC
в панель, а обновленный проект Step-7
в контроллер (питание стенда включается
преподавателем).

5. Проверить совместную работу
контроллера и HMI-панели.
Показать результат преподавателю.

6. Ответить на вопросы преподавателя.

1
Аббревиатура HMI означает
Human Machine Interface, т.е.
человеко-машинный интерфейс.

Как определить размер машинного слова в C / C ++?

Под «размером машинного слова» мы должны предположить, что это означает: наибольший размер фрагмента данных, который ЦП может обработать за одну инструкцию. (Иногда называют шириной шины данных, хотя это упрощает).

На различных ЦП: s, size_t , uintptr_t и ptrdiff_t могут быть любыми — они связаны с шириной шины адреса , а не с шириной данных ЦП. Так что об этих типах можно забыть, они нам ни о чем не говорят.

На всех основных CPU: s, char всегда 8 бит, short всегда 16 бит и long long всегда 64 бит. Остались только интересные типы int и long .


Следующие основные ЦП: существуют:

8 бит

  int = 16 бит
long = 32 бита
  

16 бит

  int = 16 бит
long = 32 бита
  

32 бита

  int = 32 бита
long = 32 бита
  

64 бита

  int = 32 бита
long = 32 бита
  

Могут существовать нетрадиционные варианты вышеупомянутого, но, как правило, из вышесказанного нельзя сказать, как отличить 8-битное от 16-битного или 32-битное от 64-битного.

Alignment нам тоже не поможет, потому что он может применяться или не применяться к различным процессорам. Многие процессоры могут нормально читать смещенные слова, но за счет более медленного кода.

Таким образом, невозможно определить «размер машинного слова» с помощью стандарта C.


Однако можно написать полностью переносимый C, который может работать на чем угодно между 8 и 64 битами, используя типы из stdint.h , особенно типы uint_fast . Следует иметь в виду следующее:

  • Неявные целочисленные рекламные акции в разных системах.Все, что угодно, начиная с uint32_t и выше, обычно безопасно и портативно.
  • Тип по умолчанию для целочисленных констант («литералов»). Чаще всего (но не всегда) это int , а значение int в данной системе может отличаться.
  • Выравнивание и заполнение структуры / объединения.
  • Размер указателя не обязательно совпадает с размером машинного слова. Особенно актуально на многих 8-, 16- и 64-битных компьютерах.

Сборка

— Почему тип данных C «long» компилируется в два MSP430 «.слово «s?

Размер переменной типа C зависит от выбора авторов для этого компилятора и цели. Не существует фиксированного правила по определению. Для одной (версии) компилятора int может быть 16 бит для одной цели и 32 для другой. Для двух разных компиляторов одной и той же цели можно выбрать 16 бит, другой 32. И размеры не должны совпадать с размерами регистров общего назначения — выбор автора.

В этом суть stdint.h, он в конечном итоге является частью компилятора и связывает точки между размерами 8, 16, 32, 64 и т. Д. И выбранными размерами компилятора для этой цели, конкретной версии gcc для x86 stdint.Предполагается, что h не будет совместим, например, с той же версией gccs msp430 stdint.h.

Кажется, здесь происходит то, что вы описали.

  символов (1 байт)
короткий (2 байта)
длинный (4 байта)
длинный длинный (8 байт)
  

Язык ассемблера специфичен для ассемблера, инструмента, а не цели, автор ассемблера может выбрать любой синтаксис, мнемонику и т. Д., Которые он выберет. Связь с документацией по микросхеме — разумный путь, но для языка ассемблера определенно нет правил.В частности, как вы определяете элементы данных. Здесь видно, что .word означает здесь 16-битное значение, а .byte — 8-битное значение.

  2048 = 0x0000 .... 00800
-2048 = 0xFFFF .... FF800
  

, поэтому, если вы отсечете младшие 8 бит 2048, вы получите 0x00, вы отрежете младшие 16, вы получите 0x0800, младшие 32 вы получите 0x00000800, так что

 . Байт 0x00

.word 0x0800
  

с прямым порядком байтов:

 . Слово 0x0800
.word 0x0000
  

для 8, 16 и 32 бит

В десятичной системе:

 .байт 0

.word 2048

.word 2048
.word 0
  

или

 . Слово 2048,0
  

в зависимости от синтаксиса ассемблера

для отрицательной версии -2048

 . Байт 0x00

.word 0xF800

.word 0xF800
.word 0xFFFF
  

для 8-, 16- и 32-битных версий этого числа

в десятичной системе счисления

 . Байт 0

.word -2048

.word -2048
.word -1
  

и длинный длинный -2048 будет

 .слово -2048
.word -1
.word -1
.word -1
  

или long long -2048 также может быть реализовано как:

 . Байт 0
.byte -8
.byte -1
.byte -1
.byte -1
.byte -1
.byte -1
.byte -1
  

генерируют одни и те же данные в двоичном формате.

Размер слова и типы данных

Размер слова и типы данных

Слово — это количество данных, которые машина может обработать за один раз. Это вписывается в аналогию с документом, которая включает символы (обычно восемь бит) и страницы (много слов, часто размером 4 или 8 КБ) в качестве других измерений данных.Слово — это целое число байтов, например, один, два, четыре или восемь. Когда кто-то говорит о «n-битах» машины, они обычно имеют в виду размер машинного слова. Например, когда люди говорят, что Pentium — это 32-битный чип, они имеют в виду размер его слова, который составляет 32 бита или четыре байта.

Размер регистров общего назначения (GPR) процессора равен размеру его слова. Ширина компонентов в данной архитектуре, например, шине памяти, обычно не меньше ширины слова.Обычно, по крайней мере, в архитектурах, которые поддерживает Linux, адресное пространство памяти равно размеру слова [2] . Следовательно, размер указателя равен размеру слова. Кроме того, размер типа long в C равен размеру слова, тогда как размер типа int иногда меньше, чем размер слова. Например, Alpha имеет размер слова 64 бита. Следовательно, регистры, указатели и длинный тип имеют длину 64 бита. Однако тип int имеет длину 32 бита.Alpha может обращаться к 64-битным словам и управлять ими одновременно.

Некоторые операционные системы и процессоры не называют стандартный размер данных словом. Вместо этого слово имеет фиксированный размер, основанный на истории или произвольных решениях по именованию. Например, некоторые системы могут разделять размеры данных на байты (8 бит), слова (16 бит), двойные слова (32 бита) и четверные слова (64 бита), несмотря на то, что рассматриваемая система может быть 32-битной. В этой книге и в Linux в целом термин — это стандартный размер данных процессора, как обсуждалось ранее.

Каждая поддерживаемая в Linux архитектура определяет BITS_PER_LONG в как длину типа C long, который является размером системного слова. Полный список всех поддерживаемых архитектур и их размер представлен в Таблице 19.1.

Стандарт C явно оставляет размер стандартных типов на усмотрение реализаций, хотя и диктует минимальный размер. Неопределенность стандартных типов C в разных архитектурах является одновременно плюсом и минусом.С другой стороны, стандартные типы могут использовать размер слов в различных архитектурах, и для типов не требуется явно указывать размер. Размер типа C long гарантированно будет размером машинного слова. Однако с другой стороны, код не может предполагать, что стандартные типы C имеют какой-либо определенный размер. Более того, нет никакой гарантии, что int имеет тот же размер, что и long.

Ситуация становится еще более запутанной, потому что нет необходимости иметь отношение между типами в пространстве пользователя и пространстве ядра.Архитектура sparc64 предоставляет 32-битное пространство пользователя, поэтому указатели, а типы int и long являются 32-битными. Однако в пространстве ядра sparc64 имеет 32-битный тип int, 64-битные указатели и длинные типы. Однако это не норма.

Некоторые правила, о которых следует помнить:

  • Символ всегда состоит из восьми бит.

  • Хотя нет правила, согласно которому тип int должен быть 32-битным, он присутствует в Linux на всех поддерживаемых в настоящее время архитектурах.

  • То же самое и для короткого типа, который составляет 16 бит на всех текущих архитектурах, хотя ни одно правило не предписывает это явно.

  • Никогда не предполагайте размер указателя или long, который может быть 32 или 64 бит на машинах, поддерживаемых в настоящее время в Linux.

  • Поскольку размер long варьируется в зависимости от архитектуры, никогда не предполагайте, что sizeof (int) равен sizeof (long).

  • Точно так же не предполагайте, что указатель и int имеют одинаковый размер.

Непрозрачные типы

Непрозрачные типы данных не раскрывают свой внутренний формат или структуру.Они примерно такие же «черные ящики», как и в C. Для них не так много языковой поддержки. Вместо этого разработчики объявляют typedef, называют его непрозрачным типом и надеются, что никто не вернет его обратно к стандартному типу C. Все использование обычно осуществляется через специальный набор интерфейсов, который создает разработчик. Примером может служить тип pid_t, в котором хранится идентификационный номер процесса. Фактический размер этого типа не разглашается, хотя любой может схитрить, взять пик и убедиться, что это int. Если в коде явно не используется размер этого типа, его можно изменить без особых хлопот.Действительно, когда-то так и было: в старых системах Unix pid_t был объявлен как short.

Другой пример непрозрачного типа — atomic_t. Как обсуждалось в главе 9 «Методы синхронизации ядра», этот тип содержит целочисленное значение, которым можно управлять атомарно. Хотя этот тип является int, использование непрозрачного типа помогает гарантировать, что данные используются только в специальных функциях атомарных операций. Непрозрачный тип также помогает скрыть размер типа, который не всегда был полными 32 битами из-за архитектурных ограничений 32-битного SPARC.

Другие примеры непрозрачных типов в ядре включают dev_t, gid_t и uid_t.

При работе с непрозрачными типами соблюдайте следующие правила:

  • Не предполагайте размер шрифта.

  • Не преобразовывать тип обратно в стандартный тип C.

  • Напишите свой код так, чтобы фактическое хранилище и формат типа могли измениться.

Особые типы

Некоторые данные в ядре, несмотря на то, что они не представлены непрозрачным типом, требуют определенного типа данных.Два примера — это счетчик jiffy и параметр flags, используемый в управлении прерыванием, оба из которых всегда должны храниться в длинном формате без знака.

При хранении и манипулировании определенными данными всегда обращайте особое внимание на тип данных, представляющий этот тип, и используйте его. Распространенной ошибкой является сохранение одного из этих значений в другом типе, таком как unsigned int. Хотя это не приведет к проблемам на 32-битных архитектурах, 64-битные машины будут иметь проблемы.

Типы с явно заданным размером

Часто, как программисту, вам нужны данные с явным размером в вашем коде.Обычно это соответствует внешним требованиям, например, к оборудованию, сети или двоичным файлам. Например, звуковая карта может иметь 32-битный регистр, сетевой пакет может иметь 16-битное поле или исполняемый файл может иметь 8-битный файл cookie. В этих случаях тип данных, представляющий данные, должен быть точно подходящего размера.

Ядро определяет эти типы данных с явным размером в , который включен в . Таблица 19.2 представляет собой полный список.

со знаком байта со знаком

Байт со знаком

Таблица 19.2. Типы данных с явно заданными размерами

Тип

Описание

s8

2

u0003

s16

16-битное целое со знаком

u16

16-битное целое без знака

72 целое число со знаком

718 целое число 1

u32

32-разрядное целое без знака

s64

64-разрядное целое со знаком

u640002

u64

подписанные варианты используются редко.

Эти явные типы являются просто определениями стандартных типов C. На 64-битной машине они могут выглядеть так:

typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed long s64;
typedef unsigned long u64;
 

Однако на 32-битной машине они, вероятно, определены следующим образом:

typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed long long s64;
typedef unsigned long long u64;
 

Эти типы могут использоваться только внутри ядра, в коде, который никогда не раскрывается в пользовательском пространстве (скажем, внутри видимой пользователю структуры в файле заголовка).Это по причинам пространства имен. Ядро также определяет видимые для пользователя варианты этих типов, которые просто одного типа с двумя знаками подчеркивания. Например, беззнаковый 32-разрядный целочисленный тип, который можно безопасно экспортировать в пространство пользователя, — __u32. Этот тип такой же, как u32; единственное отличие — это название. Вы можете использовать любое имя внутри ядра, но если тип является видимым для пользователя, вы должны использовать подчеркнутую версию с префиксом, чтобы предотвратить загрязнение пространства имен пользовательского пространства.

Подпись Chars

Стандарт C говорит, что тип данных char может быть подписанным или беззнаковым.Компилятор, процессор или оба должны решить, какое значение по умолчанию подходит для типа char.

На большинстве архитектур char подписан по умолчанию и, таким образом, имеет диапазон от 128 до 127. На некоторых других архитектурах, таких как ARM, char по умолчанию без знака и имеет диапазон от 0 до 255.

Например, в системах, где char по умолчанию беззнаковый, этот код в конечном итоге сохраняет 255 вместо 1 в i:

char i = -1;
 

На других машинах, где char по умолчанию подписан, этот код правильно сохраняет 1 в i.Если программист хочет сохранить 1, предыдущий код должен быть

.

знаковый символ i = -1;
 

А если программист действительно хочет хранить 255, то код должен читать

беззнаковый символ = 255;
 

Если вы используете char в своем коде, предположите, что это может быть как знаковый, так и беззнаковый символ. Если вам нужно, чтобы он был явно тем или другим, объявите его как таковой.

Общие сведения о типах данных C — char, int, float, double и void

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

Например, вы можете использовать номер , например 1 , 2 , 100 , или десятичную точку , число , например 99.95 , 10,5 , или текст , например «Studytonight» , все эти значения по-разному обрабатываются компилятором языка C , следовательно, мы используем типы данных для определения типа данных, используемых в любой программе.

В этом руководстве мы объяснили типы данных, примеры кода см. В руководстве Использование типов данных C.

C Типы данных

В целом, существует 5 различных категорий типов данных в языке C, это:

Тип Пример
Базовый символов, целое число, с плавающей запятой, двойное число.
Получено Массив, структура, объединение и т. Д.
Перечисление перечисляет
Тип болта правда или ложь
недействительно Пустое значение

C Типы первичных данных:

Язык C имеет 5 основных (первичных или примитивных) типов данных, это:

  1. Символ — набор символов ASCII или, как правило, один алфавит, например ‘a’ , ‘B’ и т. Д.

  2. Целое число — используется для хранения целых чисел, например 1 , 2 , 100 , 1000 и т. Д.

  3. с плавающей запятой — значения десятичной запятой или вещественных чисел, например 99,9 , 10,5 и т. Д.

  4. Double — Очень большие числовые значения, которые не допускаются в типах Integer или Floating Point.

  5. Пустота — Это означает отсутствие значения.Этот тип данных в основном используется, когда мы определяем функции.

Существуют разные ключевые слова для определения этих типов данных, ключевые слова:

Тип данных Ключевое слово
Персонаж знак
Целое число внутренний
с плавающей точкой поплавок
Двойной двойной
Пустота пусто

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

Размер различных типов данных

Размер для разных типов данных зависит от типов компилятора и процессора, короче говоря, он зависит от компьютера, на котором вы используете язык C, и от версии компилятора C, который вы установили.

char — это 1 байт

Тип данных char имеет размер 1 байт или 8 бит . Это в основном то же самое, и на него не влияет используемый процессор или компилятор.

int может быть 2 байта / 4 байта

Существует очень простой способ запомнить размер для типа данных int .Размер типа данных int обычно равен длине слова среды выполнения программы. Проще говоря, для 16-разрядной среды , int составляет 16 бит или 2 байта , а для 32-разрядной среды , int 32 бита или 4 байта .

с плавающей запятой составляет 4 байта

Тип данных с плавающей запятой имеет размер 4 байта или 32 бита . Это тип данных с одинарной точностью , который используется для хранения десятичных значений.Он используется для хранения больших значений.

float — это более быстрый тип данных по сравнению с double , потому что тип данных double работает с очень большими значениями, следовательно, он медленный.

double — это 8 байтов

Тип данных double имеет размер 8 байтов или 64 бита . Он может хранить значения, которые на удваивают размер, который может хранить тип данных с плавающей запятой , поэтому он называется double .

В 64 битах 1 бит предназначен для представления знака , 11 бит для экспоненты , а остальные 52 бита используются для мантиссы .

Тип данных double может содержать приблизительно от 15 до 17 цифр до десятичной дроби и после десятичной.

пусто — 0 байт

Тип данных void ничего не означает, следовательно, у него нет размера.

Прежде чем перейти к диапазону значений для этих типов данных, необходимо изучить еще одну важную концепцию — это Модификаторы типов данных .

C Модификаторы типов данных:

В языке C существует 4 модификатора типа данных , которые используются вместе с основными типами данных для их дальнейшей категоризации.

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

Точно так же есть модификаторы в языке C, чтобы сделать первичные типы данных более конкретными. .

Ниже приведены модификаторы:

  1. подписано

  2. без знака

  3. длинный

  4. короткий

Как следует из названия, знаковые и беззнаковые используются для представления подписанных (+ и -) и беззнаковых (только +) значений для любого типа данных.А long и short влияют на диапазон значений для любого типа данных.

Например, signed int , unsigned int , short int , long int и т. Д. — все это допустимые типы данных на языке C.

Теперь давайте посмотрим диапазон для различных типов данных, сформированный в результате 5 основных типов данных вместе с модификаторами, указанными выше.

C Диапазон значений типа данных

В приведенной ниже таблице у нас есть диапазон для различных типов данных на языке C.

Тип Типовой размер в битах Минимальный диапазон Описатель формата
знак 8 -127 до 127 % в
без знака симв. 8 от 0 до 255 % в
подписанный знак 8 -127 до 127 % в
внутренний 16 или 32 -32 767 до 32 767 % d , % i
без знака int 16 или 32 0 до 65 535 % и
подписанный внутренний 16 или 32 То же, что и int % d , % i
короткий внутренний 16 -32 767 до 32 767 % НД
без знака короткий внутренний 16 0 до 65 535 % ху
подписанный короткий внутренний 16 То же, что короткое int % НД
длинный внутренний 32 -2 147 483 647 до 2 147 483 647 % ld , % li
длинный длинный внутренний 64 — (2 63 -1) до 2 63 -1 (добавлено стандартом C99) % lld , % lli
подписанный длинный внутренний 32 То же, что и long int % ld , % li
без знака длинный int 32 0 до 4 294 967 295 % лю
без знака длинный длинный внутренний 64 2 64 — 1 (добавлено стандартом C99) % llu
с плавающей запятой 32 1E-37 до 1E + 37 с шестизначной точностью % из
двойной 64 1E-37 до 1E + 37 с десятизначной точностью % lf
длинный двойной 80 1E-37 до 1E + 37 с десятизначной точностью % Lf

Как видно из таблицы выше, при различных комбинациях типа данных и модификаторов диапазон значений изменяется.

Выполнить код →

Когда модификатор типа используется без какого-либо типа данных , то тип данных int устанавливается как тип данных по умолчанию.Итак, без знака означает без знака int , со знаком означает со знаком int , длинный означает длинный int , а короткий означает короткий int .

Что означает

со знаком и без знака ?

Это немного сложно объяснить, но давайте попробуем.

Проще говоря, модификатор без знака означает все положительные значения , а модификатор со знаком означает как положительные, так и отрицательные значения .

Когда компилятор получает числовое значение, он преобразует это значение в двоичное число, что означает комбинацию 0 и 1. Например, 32767 в двоичном формате это 01111111 11111111 , а 1 в двоичном формате — 01 (или 0001) , 2 — это 0010 и т. д.

В случае целого числа со знаком , бит наивысшего порядка или первая цифра слева (в двоичном формате) используется в качестве признака знака .Если флаг знака равен 0 , число положительное , а если это 1 , число отрицательное .

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

Для подписанное int , 11111111 11111111 означает -32,767 , и поскольку первый бит является флагом знака , чтобы пометить его как отрицательное число, а остальные представляют собой число.Тогда как в случае unsigned int , 11111111 11111111 означает 65 535 .

Производные типы данных C:

Хотя существует 5 основных типов данных, в языке C есть и производные типы данных, которые используются для хранения сложных данных.

Производные типы данных — это не что иное, как первичные типы данных, но немного скрученные или сгруппированные вместе, как массив , структура , объединение , указатели и .Они подробно обсуждаются позже.

Заключение:

В следующем руководстве мы узнаем о переменных, и там вы узнаете о фактическом использовании типов данных с примерами кода man. Итак, идем дальше.



Справка в Интернете — Origin C

Типы данных ANSI C

Origin C поддерживает все типы данных ANSI C Типы данных: тип charchar, тип shortshort, тип intInteger, тип floatfloat, тип doubledouble и тип возвращаемого значения voidvoid.Кроме того, у вас может быть массив и указатель указателя на каждый из этих типов данных.

 символьное имя [50]; // Объявить массив символов
беззнаковый символ возраста; // Объявление 8-битного целого числа без знака
беззнаковый короткий год; // Объявить беззнаковое 16-битное целое число 

Составные типы данных источника C

Array, One-DimensionalArray, Two-Dimensionals Хотя синтаксис C для объявления массива поддерживается, Origin C предоставляет строку строку, вектор вектор и матрицу матричные классы для упрощения работы с типами данных в одно- или двухмерных массивах .Эти типы данных включают char, byte, short, word, int, uint, complex. Вектор может иметь строковый тип для строкового массива arrayString Array, но матрица не может. Матрица может быть только числовой.

 строка str = "привет, мир \ n"; // Объявление и инициализация строки

вектор  vA1 = {1.5, 1.8, 1.1}; // Объявление и инициализация двойников
вектор vA2 = {2.5, 2.8, 2.1, 2.4};

вектор <строка> vs (3); // Объявление строкового массива
vs [0] = "Это"; // Присваиваем строку каждому элементу строкового массива
vs [1] = "есть";
vs [2] = "тест";

матрица  mA1; // Объявляем матрицу целых чисел
матрица мА2; // Объявляем матрицу двойников

// ПРИМЕЧАНИЕ: двойной тип данных подразумевается, когда тип данных не
// указывается в объявлении векторных и матричных переменных.

Еще один полезный класс, предоставляемый Origin C, — это сложный класс . Сложный класс поддерживает числовые данные, содержащие как realComplex, Real Component, так и imaginaryComplex, Imaginary Component.

 комплексная куб.см (4,5, 7,8); // Объявляем сложное значение.
                             // Реальный компонент установлен на 4.5 и
                             // мнимая составляющая установлена ​​на 7,8
out_complex ("значение =", копия); // Выводим комплексное значение 

Цвет

Цвета в источнике C представлены значением DWORD.Эти значения могут быть индексом во внутренней цветовой палитре OriginColor Palette или фактическим цветом, состоящим из красного, зеленого и синего компонентов.

Указатель палитры

Внутренняя палитра

Origin содержит 24 цвета. Индекс во внутренней цветовой палитре Origin — это отсчитываемое от нуля значение от 0 до 23. Origin C предоставляет именованные константы для каждого из этих цветов. Каждое имя начинается с префикса SYSCOLOR_, за которым следует название цвета. В следующей таблице перечислены 24 названия цветов и их индексы.

Индекс Имя Индекс Имя
0 SYSCOLOR_BLACK 12 SYSCOLOR_DKCYAN
1 SYSCOLOR_RED 13 SYSCOLOR_ROYAL
2 SYSCOLOR_GREEN 14 SYSCOLOR_ORANGE
3 SYSCOLOR_BLUE 15 SYSCOLOR_VIOLET
4 SYSCOLOR_CYAN 16 SYSCOLOR_PINK
5 SYSCOLOR_MAGENTA 17 SYSCOLOR_WHITE
6 SYSCOLOR_YELLOW 18 SYSCOLOR_LTGRAY
7 SYSCOLOR_DKYELLOW 19 SYSCOLOR_GRAY
8 SYSCOLOR_NAVY 20 SYSCOLOR_LTYELLOW
9 SYSCOLOR_PURPLE 21 SYSCOLOR_LTCYAN
10 SYSCOLOR_WINE 22 SYSCOLOR_LTMAGENTA
11 SYSCOLOR_OLIVE 23 SYSCOLOR_DKGRAY
 DWORD dwColor = SYSCOLOR_ORANGE; 

Автоцвет, Автоцвет

Имеется специальный индекс цвета, именуемый Auto .При использовании этого индекса элемент будет окрашен в тот же цвет, что и его родительский элемент. Не все элементы поддерживают индекс Auto . См. Графический пользовательский интерфейс Origin для элемента, чтобы определить, поддерживается ли индекс Auto .

Макрос INDEX_COLOR_AUTOMATIC используется, когда требуется значение индекса Auto .

 DWORD dwColor = INDEX_COLOR_AUTOMATIC; 

RGB

Значение цвета источника также может представлять значение RGB.Значения RGB состоят из 8-битных красных, зеленых и синих компонентов. Эти значения можно легко задать с помощью макроса RGB}.

 DWORD коричневый = RGB (139,69,19); // седло коричневое 

Цвет, преобразование RGB в исходный цвет Значения, возвращаемые макросом RGB, не могут быть напрямую использованы в качестве значений исходного цвета. Вам нужно будет использовать макрос RGB2OCOLOR для преобразования значений RGB в значения цвета Origin.

 DWORD коричневый = RGB2OCOLOR (RGB (139,69,19)); // седло коричневое 

Цвет, Проверить как значение RGB или индекс палитры Если вам когда-нибудь понадобится узнать, представляет ли значение цвета Origin значение RGB или индекс в палитре, вы можете использовать макрос OCOLOR_IS_RGB.Этот макрос возвращает истину, если значение представляет собой значение RGB, и возвращает ложь в противном случае.

 если (OCOLOR_IS_RGB (ocolor))
    out_str («значение цвета представляет собой цвет RGB»);
еще
    out_str («значение цвета представляет индекс цвета»); 

Цвет, извлечение одного цвета из RGB После того, как вы определите, что значение цвета Origin представляет значение RGB, вы можете использовать макрос GET_CRF_FROM_RGBOCOLOR для извлечения значения RGB из значения цвета Origin.

 если (OCOLOR_IS_RGB (ocolor))
{
    DWORD rgb = GET_CRF_FROM_RGBOCOLOR (цвет);
    printf ("красный =% d, зеленый =% d, синий =% d \ n",
        GetRValue (RGB), GetGValue (RGB), GetBValue (RGB));
} 

Типы данных Windows (BaseTsd.h) — Приложения Win32

APIENTRY Соглашение о вызовах системных функций.
Этот тип объявлен в WinDef.h следующим образом:
#define APIENTRY WINAPI
АТОМ Атом. Для получения дополнительной информации см. О таблицах Atom.
Этот тип объявлен в WinDef.h следующим образом:
typedef WORD ATOM;
BOOL Логическая переменная (должна быть ИСТИНА или ЛОЖЬ ).
Этот тип объявлен в WinDef.h следующим образом:
typedef int BOOL;
БУЛЕВЫЙ Логическая переменная (должна быть ИСТИНА или ЛОЖЬ ).
Этот тип объявлен в WinNT.h следующим образом:
typedef BYTE BOOLEAN;
БАЙТ Байт (8 бит).
Этот тип объявлен в WinDef.h следующим образом:
typedef unsigned char BYTE;
ЗВОНОК Соглашение о вызовах функций обратного вызова.
Этот тип объявлен в WinDef.h следующим образом:
#define CALLBACK __stdcall
CALLBACK , WINAPI и APIENTRY — все они используются для определения функций с соглашением о вызовах __stdcall. Большинство функций в Windows API объявлено с использованием WINAPI . Вы можете использовать CALLBACK для функций обратного вызова, которые вы реализуете, чтобы помочь идентифицировать функцию как функцию обратного вызова.
CCHAR 8-битный символ Windows (ANSI).
Этот тип объявлен в WinNT.h следующим образом:
typedef char CCHAR;
СИМВОЛ 8-битный символ Windows (ANSI). Для получения дополнительной информации см. Наборы символов, используемые шрифтами.
Этот тип объявлен в WinNT.h следующим образом:
typedef char CHAR;
COLORREF Значение цвета красный, зеленый, синий (RGB) (32 бита). Для получения информации об этом типе см. COLORREF .
Этот тип объявлен в WinDef.h следующим образом:
typedef DWORD COLORREF;
ПОСТОЯННО Переменная, значение которой должно оставаться постоянным во время выполнения.
Этот тип объявлен в WinDef.h следующим образом:
#define CONST const
DWORD 32-битовое целое число без знака. Диапазон значений — от 0 до 42295 в десятичной системе.
Этот тип объявлен в IntSafe.h следующим образом:
typedef unsigned long DWORD;
DWORDLONG 64-разрядное целое число без знака.Диапазон значений: от 0 до 18446744073709551615 в десятичной системе.
Этот тип объявлен в IntSafe.h следующим образом:
typedef unsigned __int64 DWORDLONG;
DWORD_PTR Длинный тип без знака для точности указателя. Используется при приведении указателя к длинному типу для выполнения арифметических действий с указателем. (Также обычно используется для общих 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 следующим образом:

C ++
  #ifdef _WIN64
 typedef int HALF_PTR;
#еще
 typedef short HALF_PTR;
#endif  
РУЧКА

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

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

typedef ПВОИДНАЯ РУЧКА;

HBITMAP

Дескриптор растрового изображения.

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

typedef HANDLE HBITMAP;

HBRUSH

Ручка к кисти.

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

typedef РУЧКА HBRUSH;

ЦВЕТНОЕ ПРОСТРАНСТВО

Дескриптор цветового пространства.

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

typedef HANDLE HCOLORSPACE;

HCONV

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

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

typedef РУЧКА HCONV;

HCONVLIST

Дескриптор списка диалогов DDE.

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

typedef HANDLE HCONVLIST;

HCURSOR

Дескриптор курсора.

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

typedef HICON HCURSOR;

HDC

Дескриптор контекста устройства (DC).

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

typedef РУЧКА HDC;

HDDEDATA

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

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

typedef HANDLE HDDEDATA;

HDESK

Дескриптор рабочего стола.

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

typedef РУЧКА HDESK;

HDROP

Дескриптор внутренней структуры drop.

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

typedef HANDLE HDROP;

HDWP

Дескриптор отложенной структуры позиции окна.

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

typedef РУЧКА HDWP;

HENHMETAFILE

Дескриптор расширенного метафайла.

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

typedef HANDLE HENHMETAFILE;

HFILE

Дескриптор файла, открытого OpenFile , а не CreateFile .

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

typedef int HFILE;

HFONT

Дескриптор шрифта.

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

typedef РУЧКА HFONT;

HGDIOBJ

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

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

typedef HANDLE HGDIOBJ;

ГЛОБАЛЬНЫЙ

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

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

typedef HANDLE HGLOBAL;

КРЮК

Ручка к крючку.

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

typedef РУЧКА КРЮЧКА;

HICON

Дескриптор значка.

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

typedef РУЧКА HICON;

HINSTANCE

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

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

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

typedef HANDLE HINSTANCE;

HKEY

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

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

typedef РУЧКА HKEY;

HKL

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

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

typedef РУЧКА HKL;

HLOCAL

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

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

typedef HANDLE HLOCAL;

HMENU

Дескриптор меню.

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

typedef HANDLE HMENU;

HMETAFILE

Дескриптор метафайла.

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

typedef HANDLE HMETAFILE;

HMODULE

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

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

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

typedef HINSTANCE HMODULE;

HMONITOR

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

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

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

HPALETTE

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

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

typedef HANDLE HPALETTE;

HPEN

Ручка ручки.

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

typedef РУЧКА HPEN;

HRESULT

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

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

typedef LONG HRESULT;

грн

Дескриптор региона.

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

typedef РУЧКА HRGN;

HRSRC

Дескриптор ресурса.

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

typedef РУЧКА HRSRC;

HSZ

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

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

typedef РУЧКА HSZ;

HWINSTA

Ручка оконной станции.

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

typedef РУЧКА WINSTA;

HWND

Дескриптор окна.

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

typedef HANDLE HWND;

ИНТ

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

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

typedef int INT;

INT_PTR

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

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

C ++
  # если определено (_WIN64)
 typedef __int64 INT_PTR;
#еще
 typedef int INT_PTR;
#endif  
INT8

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

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

typedef signed char INT8;

INT16

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

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

typedef signed short INT16;

INT32

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

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

typedef signed int INT32;

INT64

64-разрядное целое число со знаком. Диапазон значений: от —

72036854775808 до

72036854775807 в десятичной системе.

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

typedef signed __int64 INT64;

LANGID

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

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

typedef WORD LANGID;

LCID

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

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

typedef DWORD LCID;

LCTYPE

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

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

typedef DWORD LCTYPE;

LGRPID

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

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

typedef DWORD LGRPID;

ДЛИННЫЙ

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

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

typedef long LONG;

ДЛИННЫЙ

64-разрядное целое число со знаком. Диапазон значений: от —

72036854775808 до

72036854775807 в десятичной системе.

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

C ++
  #if! Defined (_M_IX86)
 typedef __int64 LONGLONG;
#еще
 typedef double LONGLONG;
#endif  
LONG_PTR

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

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

C ++
  # если определено (_WIN64)
 typedef __int64 LONG_PTR;
#еще
 typedef long LONG_PTR;
#endif  
ДЛИННЫЙ 32

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

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

typedef signed int LONG32;

ДЛИННЫЙ64

64-разрядное целое число со знаком.Диапазон значений: от —

72036854775808 до

72036854775807 в десятичной системе.

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

typedef __int64 LONG64;

LPARAM

Параметр сообщения.

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

typedef LONG_PTR LPARAM;

LPBOOL

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

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

typedef BOOL far * LPBOOL;

LPBYTE

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

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

typedef BYTE far * LPBYTE;

LPCOLORREF

Указатель на значение COLORREF .

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

typedef DWORD * LPCOLORREF;

LPCSTR

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

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

typedef __nullterminated CONST CHAR * LPCSTR;

LPCTSTR

LPCWSTR , если определен UNICODE , в противном случае — LPCSTR .Дополнительные сведения см. В разделе Типы данных Windows для строк.

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

C ++
  #ifdef UNICODE
 typedef LPCWSTR LPCTSTR;
#еще
 typedef LPCSTR LPCTSTR;
#endif  
LPCVOID

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

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

typedef CONST void * LPCVOID;

LPCWSTR

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

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

typedef CONST WCHAR * LPCWSTR;

LPDWORD

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

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

typedef DWORD * LPDWORD;

РУКОЯТКА ЛП

Указатель на РУЧКУ .

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

typedef HANDLE * LPHANDLE;

LPINT

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

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

typedef int * LPINT;

LPLONG

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

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

typedef long * LPLONG;

LPSTR

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

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

typedef CHAR * LPSTR;

ЛПЦТР

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

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

C ++
  #ifdef UNICODE
 typedef LPWSTR LPTSTR;
#еще
 typedef LPSTR LPTSTR;
#endif  
LPVOID

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

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

typedef void * LPVOID;

LPWORD

Указатель на СЛОВО .

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

typedef WORD * LPWORD;

LPWSTR

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

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

typedef WCHAR * LPWSTR;

LRESULT

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

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

typedef LONG_PTR LRESULT;

PBOOL

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

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

typedef BOOL * PBOOL;

PBOOLEAN

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

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

typedef BOOLEAN * PBOOLEAN;

PBYTE

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

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

typedef BYTE * PBYTE;

ПЧАР

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

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

typedef CHAR * PCHAR;

PCSTR

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

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

typedef CONST CHAR * PCSTR;

PCTSTR

A PCWSTR , если определен UNICODE , в противном случае — PCSTR . Дополнительные сведения см. В разделе Типы данных Windows для строк.

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

C ++
  #ifdef UNICODE
 typedef LPCWSTR PCTSTR;
#еще
 typedef LPCSTR PCTSTR;
#endif  
PCWSTR

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

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

typedef CONST WCHAR * PCWSTR;

PDWORD

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

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

typedef DWORD * PDWORD;

PDWORDLONG

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

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

typedef DWORDLONG * PDWORDLONG;

PDWORD_PTR

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

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

typedef DWORD_PTR * PDWORD_PTR;

PDWORD32

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

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

typedef DWORD32 * PDWORD32;

PDWORD64

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

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

typedef DWORD64 * PDWORD64;

PFLOAT

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

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

typedef FLOAT * PFLOAT;

PHALF_PTR

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

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

C ++
  #ifdef _WIN64
 typedef HALF_PTR * PHALF_PTR;
#еще
 typedef HALF_PTR * PHALF_PTR;
#endif  
ФОНД

Указатель на РУЧКУ .

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

typedef HANDLE * PHANDLE;

PHKEY

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

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

typedef HKEY * PHKEY;

PINT

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

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

typedef int * PINT;

PINT_PTR

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

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

typedef INT_PTR * PINT_PTR;

PINT8

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

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

typedef INT8 * PINT8;

PINT16

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

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

typedef INT16 * PINT16;

PINT32

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

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

typedef INT32 * PINT32;

PINT64

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

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

typedef INT64 * PINT64;

PLCID

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

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

typedef PDWORD PLCID;

PLONG

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

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

typedef LONG * PLONG;

PLONGLONG

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

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

typedef LONGLONG * PLONGLONG;

PLONG_PTR

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

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

typedef LONG_PTR * PLONG_PTR;

PLONG32

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

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

typedef LONG32 * PLONG32;

PLONG64

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

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

typedef LONG64 * PLONG64;

УКАЗАТЕЛЬ_32

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

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

C ++
  # если определено (_WIN64)
#define POINTER_32 __ptr32
#еще
#define POINTER_32
#endif  
УКАЗАТЕЛЬ_64

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

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

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

C ++
  #if (_MSC_VER> = 1300)
#define POINTER_64 __ptr64
#еще
#define POINTER_64
#endif  
ПОДПИСАННЫЙ УКАЗАТЕЛЬ

Указатель со знаком.

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

#define POINTER_SIGNED __sptr

УКАЗАТЕЛЬ_НЕ ПОДПИСАНО

Беззнаковый указатель.

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

#define POINTER_UNSIGNED __uptr

PSHORT

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

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

typedef SHORT * PSHORT;

PSIZE_T

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

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

typedef SIZE_T * PSIZE_T;

PSSIZE_T

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

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

typedef SSIZE_T * PSSIZE_T;

PSTR

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

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

typedef CHAR * PSTR;

PTBYTE

Указатель на ТБайт .

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

typedef TBYTE * PTBYTE;

PTCHAR

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

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

typedef TCHAR * PTCHAR;

PTSTR

A PWSTR , если определен UNICODE , в противном случае — PSTR .Дополнительные сведения см. В разделе Типы данных Windows для строк.

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

C ++
  #ifdef UNICODE
 typedef LPWSTR PTSTR;
#else typedef LPSTR PTSTR;
#endif  
PUCHAR

Указатель на УЧАР .

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

typedef UCHAR * PUCHAR;

PUHALF_PTR

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

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

C ++
  #ifdef _WIN64
 typedef UHALF_PTR * PUHALF_PTR;
#еще
 typedef UHALF_PTR * PUHALF_PTR;
#endif  
PUINT

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

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

typedef UINT * PUINT;

PUINT_PTR

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

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

typedef UINT_PTR * PUINT_PTR;

PUINT8

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

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

typedef UINT8 * PUINT8;

PUINT16

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

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

typedef UINT16 * PUINT16;

PUINT32

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

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

typedef UINT32 * PUINT32;

PUINT64

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

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

typedef UINT64 * PUINT64;

PULONG

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

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

typedef ULONG * PULONG;

ПОЛОНГЛОНГ

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

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

typedef ULONGLONG * PULONGLONG;

PULONG_PTR

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

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

typedef ULONG_PTR * PULONG_PTR;

PULONG32

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

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

typedef ULONG32 * PULONG32;

PULONG64

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

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

typedef ULONG64 * PULONG64;

ПУШКА

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

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

typedef USHORT * PUSHORT;

ПВОИД

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

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

typedef void * PVOID;

PWCHAR

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

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

typedef WCHAR * PWCHAR;

ПАРОЛЬ

Указатель на СЛОВО .

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

typedef WORD * PWORD;

PWSTR

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

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

typedef WCHAR * PWSTR;

QWORD

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

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

typedef unsigned __int64 QWORD;

SC_HANDLE

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

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

typedef HANDLE SC_HANDLE;

SC_LOCK

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

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

typedef LPVOID SC_LOCK;

SERVICE_STATUS_HANDLE

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

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

typedef HANDLE SERVICE_STATUS_HANDLE;

КОРОТКИЕ

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

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

typedef short SHORT;

РАЗМЕР_Т

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

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

typedef ULONG_PTR SIZE_T;

SSIZE_T

Подписанная версия SIZE_T .

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

typedef LONG_PTR SSIZE_T;

ТБайт

A WCHAR , если определен UNICODE , в противном случае — CHAR .

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

C ++
  #ifdef UNICODE
 typedef WCHAR TBYTE;
#еще
 typedef unsigned char TBYTE;
#endif  
ТЧАР

A WCHAR , если определен UNICODE , в противном случае — CHAR .

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

C ++
  #ifdef UNICODE
 typedef WCHAR TCHAR;
#еще
 typedef char TCHAR;
#endif  
УЧАР

Беззнаковый СИМВОЛ .

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

typedef unsigned char UCHAR;

UHALF_PTR

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

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

C ++
  #ifdef _WIN64
 typedef unsigned int UHALF_PTR;
#еще
 typedef unsigned short UHALF_PTR;
#endif  
УИНТ

Без знака INT . Диапазон значений — от 0 до 42295 в десятичной системе.

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

typedef unsigned int UINT;

UINT_PTR

Без знака INT_PTR .

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

C ++
  # если определено (_WIN64)
 typedef без знака __int64 UINT_PTR;
#еще
 typedef unsigned int UINT_PTR;
#endif  
UINT8

Без знака INT8 .

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

typedef unsigned char UINT8;

UINT16

Без знака INT16 .

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

typedef unsigned short UINT16;

UINT32

Без знака INT32 . Диапазон значений — от 0 до 42295 в десятичной системе.

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

typedef unsigned int UINT32;

UINT64

Без знака INT64 . Диапазон значений: от 0 до 18446744073709551615 в десятичной системе.

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

typedef usigned __int 64 UINT64;

ULONG

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

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

typedef unsigned long ULONG;

ULONGLONG

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

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

C ++
  #if! Defined (_M_IX86)
 typedef unsigned __int64 ULONGLONG;
#еще
 typedef double ULONGLONG;
#endif  
ULONG_PTR

Без знака LONG_PTR .

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

C ++
  # если определено (_WIN64)
 typedef без знака __int64 ULONG_PTR;
#еще
 typedef unsigned long ULONG_PTR;
#endif  
ULONG32

Без знака LONG32 . Диапазон значений — от 0 до 42295 в десятичной системе.

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

typedef unsigned int ULONG32;

ULONG64

Без знака LONG64 . Диапазон значений: от 0 до 18446744073709551615 в десятичной системе.

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

typedef unsigned __int64 ULONG64;

UNICODE_STRING

Строка Unicode.

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

C ++
  typedef struct _UNICODE_STRING {
  USHORT Длина;
  USHORT MaximumLength;
  Буфер PWSTR;
} UNICODE_STRING;
typedef UNICODE_STRING * PUNICODE_STRING;
typedef const UNICODE_STRING * PCUNICODE_STRING;  
USHORT

Без знака КОРОТКИЙ . Диапазон значений — от 0 до 65 535 десятичных знаков.

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

typedef unsigned short USHORT;

США

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

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

typedef LONGLONG USN;

ПНЕТ

Любого типа.

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

#define VOID void

WCHAR

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

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

typedef wchar_t WCHAR;

WINAPI

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

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

# определить WINAPI __stdcall

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

СЛОВО

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

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

typedef беззнаковое короткое СЛОВО;

WPARAM

Параметр сообщения.

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

typedef UINT_PTR WPARAM;

Преобразования типов данных для вызовов API из Visual Basic

Преобразования типов данных для вызовов API из Visual Basic

Введение

Функции Visual Basic и Windows API используют разные имена для определенных типов данных.
На этой странице представлен краткий обзор этих различий и способов преобразования этих типов.

Сводка типов

Это список наиболее распространенных типов данных, которые можно найти в объявлениях API.Большинство этих имен являются псевдонимами стандартных целочисленных типов.
В Visual Basic вам необходимо включить
ключевое слово ByRef или ByVal явно в объявлении.
Псевдонимы, используемые в исходных объявлениях стиля C, уже имеют этот набор.

.

Тип данных C Объявить как Описание
БАЙТ , СИМВОЛ ByVal переменная As Byte Один байт в памяти
BOOL ByVal переменная As Long Long, которое должно иметь значение 1 или 0
АТОМ ByVal переменная как целое число Выражение, возвращающее целое число
КОРОТКИЕ ByVal переменная как целое 16-битное значение, подобное целочисленному типу, используемому в Visual Basic
ИНТ ByVal переменная As Long 32-битное целое число
ДЛИННЫЙ ByVal переменная As Long Синоним INT
СЛОВО ByVal переменная как целое число Целочисленное значение или два (побитовое сцепление) BYTE S *
DWORD ByVal переменная As Long Длинное значение или два (побитовое сцепление) WORD S *
УИНТ ByVal переменная As Long 32-битное целое число, значение которого не может быть меньше 0 *
LPARAM , WPARAM , LRESULT ByVal переменная As Long Синоним INT , в некоторых случаях используется для описания ожидаемого значения
COLORREF ByVal переменная As Long Синоним INT ; Простой цветовой код RGB; но не как OLE_COLOR *
HWND , HDC , HMENU и т. Д. ByVal переменная As Long Синоним INT ; в некоторых случаях используется для описания ожидаемого значения (дескриптор).
LPDWORD , LPINT , LPUINT переменная По длине Длинный указатель на тип данных после LP
LPWORD переменная как целое число Длинный указатель на СЛОВО
LPRECT переменная As RECT Длинный указатель на структуру типа RECT
LP * переменная As (тип) Длинный указатель на переменную, структуру или функцию *
LPSTR , LPCSTR ByVal переменная As String Строковая переменная, Visual Basic преобразует значения
LPVOID переменная Любая Любая переменная (используйте ByVal при передаче строки)
NULL Любая или
ByVal переменная Как длинная
Укажите только ByVal Nothing , ByVal 0 и или vbNullString в качестве значения
НЕДЕЙСТВИТЕЛЬНО Sub процедура Не применимо; пустота означает пустой, ничего, нада, нет

Особенности

COLORREF

Значение COLORREF представляет собой комбинацию красного, зеленого и синего цветов.Visual Basic использует OLE_COLOR , который также может хранить идентификаторы системных цветов.
Тип COLORREF не поддерживает это.
Чтобы преобразовать этот тип, используйте oleTranslateColor (). API.

DWORD, WORD

Очень часто эти типы можно рассматривать как значения Long .
DWORD также используется для хранения двух значений;
LoWord и HiWord.
HiWord хранится в первых двух байтах,
а нижнее слово сохраняется в последних двух байтах длинного значения.

Струны

Строки автоматически преобразуются в их эквивалент в стиле C.Передайте их как ByVal , переменную As String.
Такие функции, как StrPtr () и StrConv ()
очень полезны, если вам нужно сохранить строку в структуре.

Указатели

Указатели — это специальные типы, в которых хранится место в памяти переменной.
Visual Basic не позволяет использовать указатели напрямую,
но использование ByRef в списке аргументов дает желаемый эффект.
Он передаст в функцию место в памяти (указатель) переменной.

Указатели функций

Указатель на функцию можно передать с помощью
Адрес оператора.Большинство функций обратного вызова предоставляют дополнительный параметр для включения
настраиваемое длинное значение (параметр lParam ).
Чтобы передать объект-указатель на это значение, используйте ObjPtr ().
В функции обратного вызова вы можете использовать API CopyMemory () для копирования длинных
значение неинициализированного объекта.

Беззнаковые типы

Такие языки, как C и C ++, поддерживают так называемые «беззнаковые типы».
Эти типы имеют другой диапазон, который Visual Basic не поддерживает.
Обычный Long поддерживает как отрицательные, так и положительные значения.В беззнаковом long отрицательный диапазон не используется.

Это дает возможность хранить большие положительные значения в типе данных.
Например, значение & HFFFFFFFF (-1 как Long) равно 42295, что в два раза больше.

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

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