Windows Data Types
The data types supported by Windows are used to define function return values, function and message parameters, and structure members. They define the size and meaning of these elements. For more information about the underlying C/C++ data types, see Data Type Ranges.
The following table contains the following types: character, integer, Boolean, pointer, and handle. The character, integer, and Boolean types are common to most C compilers. Most of the pointer-type names begin with a prefix of P or LP. Handles refer to a resource that has been loaded into memory.
For more information about handling 64-bit integers, see Large Integers.
Data type | Description | ||
---|---|---|---|
APIENTRY |
The calling convention for system functions. This type is declared in WinDef.h as follows: #define APIENTRY WINAPI |
||
ATOM |
An atom. For more information, see About Atom Tables. This type is declared in WinDef.h as follows: typedef WORD ATOM; |
||
BOOL |
A Boolean variable (should be TRUE or FALSE). This type is declared in WinDef.h as follows: typedef int BOOL; |
||
BOOLEAN |
A Boolean variable (should be TRUE or FALSE). This type is declared in WinNT.h as follows: typedef BYTE BOOLEAN; |
||
BYTE |
A byte (8 bits). This type is declared in WinDef.h as follows: typedef unsigned char BYTE; |
||
CALLBACK |
The calling convention for callback functions. This type is declared in WinDef.h as follows: #define CALLBACK __stdcall CALLBACK, WINAPI, and APIENTRY are all used to define functions with the __stdcall calling convention. Most functions in the Windows API are declared using WINAPI. You may wish to use CALLBACK for the callback functions that you implement to help identify the function as a callback function. |
||
CCHAR |
An 8-bit Windows (ANSI) character. This type is declared in WinNT.h as follows: typedef char CCHAR; |
||
CHAR |
An 8-bit Windows (ANSI) character. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows: typedef char CHAR; |
||
COLORREF |
The red, green, blue (RGB) color value (32 bits). See COLORREF for information on this type. This type is declared in WinDef.h as follows: typedef DWORD COLORREF; |
||
CONST |
A variable whose value is to remain constant during execution. This type is declared in WinDef.h as follows: #define CONST const |
||
DWORD |
A 32-bit unsigned integer. The range is 0 through 4294967295 decimal. This type is declared in IntSafe.h as follows: typedef unsigned long DWORD; |
||
DWORDLONG |
A 64-bit unsigned integer. The range is 0 through 18446744073709551615 decimal. This type is declared in IntSafe.h as follows: typedef unsigned __int64 DWORDLONG; |
||
DWORD_PTR |
An unsigned long type for pointer precision. Use when casting a pointer to a long type to perform pointer arithmetic. (Also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.) This type is declared in BaseTsd.h as follows: typedef ULONG_PTR DWORD_PTR; |
||
DWORD32 |
A 32-bit unsigned integer. This type is declared in BaseTsd.h as follows: typedef unsigned int DWORD32; |
||
DWORD64 |
A 64-bit unsigned integer. This type is declared in BaseTsd.h as follows: typedef unsigned __int64 DWORD64; |
||
FLOAT |
A floating-point variable. This type is declared in WinDef.h as follows: typedef float FLOAT; |
||
HACCEL |
A handle to an accelerator table. This type is declared in WinDef.h as follows: typedef HANDLE HACCEL; |
||
HALF_PTR |
Half the size of a pointer. Use within a structure that contains a pointer and two small fields. This type is declared in BaseTsd.h as follows:
|
||
HANDLE |
A handle to an object. This type is declared in WinNT.h as follows:
|
||
HBITMAP |
A handle to a bitmap. This type is declared in WinDef.h as follows:
|
||
HBRUSH |
A handle to a brush. This type is declared in WinDef.h as follows:
|
||
HCOLORSPACE |
A handle to a color space. This type is declared in WinDef.h as follows:
|
||
HCONV |
A handle to a dynamic data exchange (DDE) conversation. This type is declared in Ddeml.h as follows:
|
||
HCONVLIST |
A handle to a DDE conversation list. This type is declared in Ddeml.h as follows:
|
||
HCURSOR |
A handle to a cursor. This type is declared in WinDef.h as follows:
|
||
HDC |
A handle to a device context (DC). This type is declared in WinDef.h as follows:
|
||
HDDEDATA |
A handle to DDE data. This type is declared in Ddeml.h as follows:
|
||
HDESK |
A handle to a desktop. This type is declared in WinDef.h as follows:
|
||
HDROP |
A handle to an internal drop structure. This type is declared in ShellApi.h as follows:
|
||
HDWP |
A handle to a deferred window position structure. This type is declared in WinUser.h as follows:
|
||
HENHMETAFILE |
A handle to an enhanced metafile. This type is declared in WinDef.h as follows:
|
||
HFILE |
A handle to a file opened by OpenFile, not CreateFile. This type is declared in WinDef.h as follows:
|
||
HFONT |
A handle to a font. This type is declared in WinDef.h as follows:
|
||
HGDIOBJ |
A handle to a GDI object. This type is declared in WinDef.h as follows:
|
||
HGLOBAL |
A handle to a global memory block. This type is declared in WinDef.h as follows:
|
||
HHOOK |
A handle to a hook. This type is declared in WinDef.h as follows:
|
||
HICON |
A handle to an icon. This type is declared in WinDef.h as follows:
|
||
HINSTANCE |
A handle to an instance. This is the base address of the module in memory. HMODULE and HINSTANCE are the same today, but represented different things in 16-bit Windows. This type is declared in WinDef.h as follows:
|
||
HKEY |
A handle to a registry key. This type is declared in WinDef.h as follows:
|
||
HKL |
An input locale identifier. This type is declared in WinDef.h as follows:
|
||
HLOCAL |
A handle to a local memory block. This type is declared in WinDef.h as follows:
|
||
HMENU |
A handle to a menu. This type is declared in WinDef.h as follows:
|
||
HMETAFILE |
A handle to a metafile. This type is declared in WinDef.h as follows:
|
||
HMODULE |
A handle to a module. This is the base address of the module in memory. HMODULE and HINSTANCE are the same in current versions of Windows, but represented different things in 16-bit Windows. This type is declared in WinDef.h as follows:
|
||
HMONITOR |
A handle to a display monitor. This type is declared in WinDef.h as follows:
|
||
HPALETTE |
A handle to a palette. This type is declared in WinDef.h as follows:
|
||
HPEN |
A handle to a pen. This type is declared in WinDef.h as follows:
|
||
HRESULT |
The return codes used by COM interfaces. For more information, see Structure of the COM Error Codes. To test an HRESULT value, use the FAILED and SUCCEEDED macros. This type is declared in WinNT.h as follows:
|
||
HRGN |
A handle to a region. This type is declared in WinDef.h as follows:
|
||
HRSRC |
A handle to a resource. This type is declared in WinDef.h as follows:
|
||
HSZ |
A handle to a DDE string. This type is declared in Ddeml.h as follows:
|
||
HWINSTA |
A handle to a window station. This type is declared in WinDef.h as follows:
|
||
HWND |
A handle to a window. This type is declared in WinDef.h as follows:
|
||
INT |
A 32-bit signed integer. The range is -2147483648 through 2147483647 decimal. This type is declared in WinDef.h as follows:
|
||
INT_PTR |
A signed integer type for pointer precision. Use when casting a pointer to an integer to perform pointer arithmetic. This type is declared in BaseTsd.h as follows:
|
||
INT8 |
An 8-bit signed integer. This type is declared in BaseTsd.h as follows:
|
||
INT16 |
A 16-bit signed integer. This type is declared in BaseTsd.h as follows:
|
||
INT32 |
A 32-bit signed integer. The range is -2147483648 through 2147483647 decimal. This type is declared in BaseTsd.h as follows:
|
||
INT64 |
A 64-bit signed integer. The range is -9223372036854775808 through 9223372036854775807 decimal. This type is declared in BaseTsd.h as follows:
|
||
LANGID |
A language identifier. For more information, see Language Identifiers. This type is declared in WinNT.h as follows:
|
||
LCID |
A locale identifier. For more information, see Locale Identifiers. This type is declared in WinNT.h as follows:
|
||
LCTYPE |
A locale information type. For a list, see Locale Information Constants. This type is declared in WinNls.h as follows:
|
||
LGRPID |
A language group identifier. For a list, see EnumLanguageGroupLocales. This type is declared in WinNls.h as follows:
|
||
LONG |
A 32-bit signed integer. The range is -2147483648 through 2147483647 decimal. This type is declared in WinNT.h as follows:
|
||
LONGLONG |
A 64-bit signed integer. The range is -9223372036854775808 through 9223372036854775807 decimal. This type is declared in WinNT.h as follows:
|
||
LONG_PTR |
A signed long type for pointer precision. Use when casting a pointer to a long to perform pointer arithmetic. This type is declared in BaseTsd.h as follows:
|
||
LONG32 |
A 32-bit signed integer. The range is -2147483648 through 2147483647 decimal. This type is declared in BaseTsd.h as follows:
|
||
LONG64 |
A 64-bit signed integer. The range is -9223372036854775808 through 9223372036854775807 decimal. This type is declared in BaseTsd.h as follows:
|
||
LPARAM |
A message parameter. This type is declared in WinDef.h as follows:
|
||
LPBOOL |
A pointer to a BOOL. This type is declared in WinDef.h as follows:
|
||
LPBYTE |
A pointer to a BYTE. This type is declared in WinDef.h as follows:
|
||
LPCOLORREF |
A pointer to a COLORREF value. This type is declared in WinDef.h as follows:
|
||
LPCSTR |
A pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
LPCTSTR |
An LPCWSTR if UNICODE is defined, an LPCSTR otherwise. For more information, see Windows Data Types for Strings. This type is declared in WinNT.h as follows:
|
||
LPCVOID |
A pointer to a constant of any type. This type is declared in WinDef.h as follows:
|
||
LPCWSTR |
A pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
LPDWORD |
A pointer to a DWORD. This type is declared in WinDef.h as follows:
|
||
LPHANDLE |
A pointer to a HANDLE. This type is declared in WinDef.h as follows:
|
||
LPINT |
A pointer to an INT. This type is declared in WinDef.h as follows:
|
||
LPLONG |
A pointer to a LONG. This type is declared in WinDef.h as follows:
|
||
LPSTR |
A pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
LPTSTR |
An LPWSTR if UNICODE is defined, an LPSTR otherwise. For more information, see Windows Data Types for Strings. This type is declared in WinNT.h as follows:
|
||
LPVOID |
A pointer to any type. This type is declared in WinDef.h as follows:
|
||
LPWORD |
A pointer to a WORD. This type is declared in WinDef.h as follows:
|
||
LPWSTR |
A pointer to a null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
LRESULT |
Signed result of message processing. This type is declared in WinDef.h as follows:
|
||
PBOOL |
A pointer to a BOOL. This type is declared in WinDef.h as follows:
|
||
PBOOLEAN |
A pointer to a BOOLEAN. This type is declared in WinNT.h as follows:
|
||
PBYTE |
A pointer to a BYTE. This type is declared in WinDef.h as follows:
|
||
PCHAR |
A pointer to a CHAR. This type is declared in WinNT.h as follows:
|
||
PCSTR |
A pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
PCTSTR |
A PCWSTR if UNICODE is defined, a PCSTR otherwise. For more information, see Windows Data Types for Strings. This type is declared in WinNT.h as follows:
|
||
PCWSTR |
A pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
PDWORD |
A pointer to a DWORD. This type is declared in WinDef.h as follows:
|
||
PDWORDLONG |
A pointer to a DWORDLONG. This type is declared in WinNT.h as follows:
|
||
PDWORD_PTR |
A pointer to a DWORD_PTR. This type is declared in BaseTsd.h as follows:
|
||
PDWORD32 |
A pointer to a DWORD32. This type is declared in BaseTsd.h as follows:
|
||
PDWORD64 |
A pointer to a DWORD64. This type is declared in BaseTsd.h as follows:
|
||
PFLOAT |
A pointer to a FLOAT. This type is declared in WinDef.h as follows:
|
||
PHALF_PTR |
A pointer to a HALF_PTR. This type is declared in BaseTsd.h as follows:
|
||
PHANDLE |
A pointer to a HANDLE. This type is declared in WinNT.h as follows:
|
||
PHKEY |
A pointer to an HKEY. This type is declared in WinDef.h as follows:
|
||
PINT |
A pointer to an INT. This type is declared in WinDef.h as follows:
|
||
PINT_PTR |
A pointer to an INT_PTR. This type is declared in BaseTsd.h as follows:
|
||
PINT8 |
A pointer to an INT8. This type is declared in BaseTsd.h as follows:
|
||
PINT16 |
A pointer to an INT16. This type is declared in BaseTsd.h as follows:
|
||
PINT32 |
A pointer to an INT32. This type is declared in BaseTsd.h as follows:
|
||
PINT64 |
A pointer to an INT64. This type is declared in BaseTsd.h as follows:
|
||
PLCID |
A pointer to an LCID. This type is declared in WinNT.h as follows:
|
||
PLONG |
A pointer to a LONG. This type is declared in WinNT.h as follows:
|
||
PLONGLONG |
A pointer to a LONGLONG. This type is declared in WinNT.h as follows:
|
||
PLONG_PTR |
A pointer to a LONG_PTR. This type is declared in BaseTsd.h as follows:
|
||
PLONG32 |
A pointer to a LONG32. This type is declared in BaseTsd.h as follows:
|
||
PLONG64 |
A pointer to a LONG64. This type is declared in BaseTsd.h as follows:
|
||
POINTER_32 |
A 32-bit pointer. On a 32-bit system, this is a native pointer. On a 64-bit system, this is a truncated 64-bit pointer. This type is declared in BaseTsd.h as follows:
|
||
POINTER_64 |
A 64-bit pointer. On a 64-bit system, this is a native pointer. On a 32-bit system, this is a sign-extended 32-bit pointer. Note that it is not safe to assume the state of the high pointer bit. This type is declared in BaseTsd.h as follows:
|
||
POINTER_SIGNED |
A signed pointer. This type is declared in BaseTsd.h as follows:
|
||
POINTER_UNSIGNED |
An unsigned pointer. This type is declared in BaseTsd.h as follows:
|
||
PSHORT |
A pointer to a SHORT. This type is declared in WinNT.h as follows:
|
||
PSIZE_T |
A pointer to a SIZE_T. This type is declared in BaseTsd.h as follows:
|
||
PSSIZE_T |
A pointer to a SSIZE_T. This type is declared in BaseTsd.h as follows:
|
||
PSTR |
A pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
PTBYTE |
A pointer to a TBYTE. This type is declared in WinNT.h as follows:
|
||
PTCHAR |
A pointer to a TCHAR. This type is declared in WinNT.h as follows:
|
||
PTSTR |
A PWSTR if UNICODE is defined, a PSTR otherwise. For more information, see Windows Data Types for Strings. This type is declared in WinNT.h as follows:
|
||
PUCHAR |
A pointer to a UCHAR. This type is declared in WinDef.h as follows:
|
||
PUHALF_PTR |
A pointer to a UHALF_PTR. This type is declared in BaseTsd.h as follows:
|
||
PUINT |
A pointer to a UINT. This type is declared in WinDef.h as follows:
|
||
PUINT_PTR |
A pointer to a UINT_PTR. This type is declared in BaseTsd.h as follows:
|
||
PUINT8 |
A pointer to a UINT8. This type is declared in BaseTsd.h as follows:
|
||
PUINT16 |
A pointer to a UINT16. This type is declared in BaseTsd.h as follows:
|
||
PUINT32 |
A pointer to a UINT32. This type is declared in BaseTsd.h as follows:
|
||
PUINT64 |
A pointer to a UINT64. This type is declared in BaseTsd.h as follows:
|
||
PULONG |
A pointer to a ULONG. This type is declared in WinDef.h as follows:
|
||
PULONGLONG |
A pointer to a ULONGLONG. This type is declared in WinDef.h as follows:
|
||
PULONG_PTR |
A pointer to a ULONG_PTR. This type is declared in BaseTsd.h as follows:
|
||
PULONG32 |
A pointer to a ULONG32. This type is declared in BaseTsd.h as follows:
|
||
PULONG64 |
A pointer to a ULONG64. This type is declared in BaseTsd.h as follows:
|
||
PUSHORT |
A pointer to a USHORT. This type is declared in WinDef.h as follows:
|
||
PVOID |
A pointer to any type. This type is declared in WinNT.h as follows:
|
||
PWCHAR |
A pointer to a WCHAR. This type is declared in WinNT.h as follows:
|
||
PWORD |
A pointer to a WORD. This type is declared in WinDef.h as follows:
|
||
PWSTR |
A pointer to a null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
QWORD |
A 64-bit unsigned integer. This type is declared as follows:
|
||
SC_HANDLE |
A handle to a service control manager database. For more information, see SCM Handles. This type is declared in WinSvc.h as follows:
|
||
SC_LOCK |
A lock to a service control manager database. For more information, see SCM Handles. This type is declared in WinSvc.h as follows:
|
||
SERVICE_STATUS_HANDLE |
A handle to a service status value. For more information, see SCM Handles. This type is declared in WinSvc.h as follows:
|
||
SHORT |
A 16-bit integer. The range is -32768 through 32767 decimal. This type is declared in WinNT.h as follows:
|
||
SIZE_T |
The maximum number of bytes to which a pointer can point. Use for a count that must span the full range of a pointer. This type is declared in BaseTsd.h as follows:
|
||
SSIZE_T |
A signed version of SIZE_T. This type is declared in BaseTsd.h as follows:
|
||
TBYTE |
A WCHAR if UNICODE is defined, a CHAR otherwise. This type is declared in WinNT.h as follows:
|
||
TCHAR |
A WCHAR if UNICODE is defined, a CHAR otherwise. This type is declared in WinNT.h as follows:
|
||
UCHAR |
An unsigned CHAR. This type is declared in WinDef.h as follows:
|
||
UHALF_PTR |
An unsigned HALF_PTR. Use within a structure that contains a pointer and two small fields. This type is declared in BaseTsd.h as follows:
|
||
UINT |
An unsigned INT. The range is 0 through 4294967295 decimal. This type is declared in WinDef.h as follows:
|
||
UINT_PTR |
An unsigned INT_PTR. This type is declared in BaseTsd.h as follows:
|
||
UINT8 |
An unsigned INT8. This type is declared in BaseTsd.h as follows:
|
||
UINT16 |
An unsigned INT16. This type is declared in BaseTsd.h as follows:
|
||
UINT32 |
An unsigned INT32. The range is 0 through 4294967295 decimal. This type is declared in BaseTsd.h as follows:
|
||
UINT64 |
An unsigned INT64. The range is 0 through 18446744073709551615 decimal. This type is declared in BaseTsd.h as follows:
|
||
ULONG |
An unsigned LONG. The range is 0 through 4294967295 decimal. This type is declared in WinDef.h as follows:
|
||
ULONGLONG |
A 64-bit unsigned integer. The range is 0 through 18446744073709551615 decimal. This type is declared in WinNT.h as follows:
|
||
ULONG_PTR |
An unsigned LONG_PTR. This type is declared in BaseTsd.h as follows:
|
||
ULONG32 |
An unsigned LONG32. The range is 0 through 4294967295 decimal. This type is declared in BaseTsd.h as follows:
|
||
ULONG64 |
An unsigned LONG64. The range is 0 through 18446744073709551615 decimal. This type is declared in BaseTsd.h as follows:
|
||
UNICODE_STRING |
A Unicode string. This type is declared in Winternl.h as follows:
|
||
USHORT |
An unsigned SHORT. The range is 0 through 65535 decimal. This type is declared in WinDef.h as follows:
|
||
USN |
An update sequence number (USN). This type is declared in WinNT.h as follows:
|
||
VOID |
Any type. This type is declared in WinNT.h as follows:
|
||
WCHAR |
A 16-bit Unicode character. For more information, see Character Sets Used By Fonts. This type is declared in WinNT.h as follows:
|
||
WINAPI |
The calling convention for system functions. This type is declared in WinDef.h as follows:
CALLBACK, WINAPI, and APIENTRY are all used to define functions with the __stdcall calling convention. Most functions in the Windows API are declared using WINAPI. You may wish to use CALLBACK for the callback functions that you implement to help identify the function as a callback function. |
||
WORD |
A 16-bit unsigned integer. The range is 0 through 65535 decimal. This type is declared in WinDef.h as follows:
|
||
WPARAM |
A message parameter. This type is declared in WinDef.h as follows:
|
Requirements
Requirement | Value |
---|---|
Minimum supported client |
Windows XP [desktop apps only] |
Minimum supported server |
Windows Server 2003 [desktop apps only] |
Header |
|