The data types supported by Microsoft 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.
| Type | Description |
|---|
ATOM | Atom. For more information, see Atoms.
This type is declared in WinDef.h as follows:
|
BOOL | Boolean variable (should be TRUE or FALSE).
This type is declared in WinDef.h as follows:
|
BOOLEAN | Boolean variable (should be TRUE or FALSE).
This type is declared in WinNT.h as follows:
|
BYTE | Byte (8 bits).
This type is declared in WinDef.h as follows:
| typedef unsigned char BYTE; |
|
CALLBACK | Calling convention for callback functions.
This type is declared in WinDef.h as follows:
| #define CALLBACK __stdcall |
|
CHAR | 8-bit Windows (ANSI) character. For more information, see
Character Sets Used By Fonts.
This type is declared in WinNT.h as follows:
|
COLORREF | Red, green, blue (RGB) color value (32 bits). See
COLORREF for information on this type.
This type is declared in WinDef.h as follows:
|
CONST | Variable whose value is to remain constant during execution.
This type is declared in WinDef.h as follows:
|
DWORD | 32-bit unsigned integer.
The range is 0 through 4294967295 decimal.
This type is declared in WinDef.h as follows:
| typedef unsigned long DWORD; |
|
DWORDLONG | 64-bit unsigned integer.
The range is 0 through 18446744073709551615 decimal.
This type is declared in WinNT.h as follows:
| typedef ULONGLONG DWORDLONG; |
|
DWORD_PTR | 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 | 32-bit unsigned integer.
This type is declared in BaseTsd.h as follows:
| typedef unsigned int DWORD32; |
|
DWORD64 | 64-bit unsigned integer.
This type is declared in BaseTsd.h as follows:
| typedef unsigned __int64 DWORD64; |
|
FLOAT | Floating-point variable.
This type is declared in WinDef.h as follows:
|
HACCEL | Handle to an accelerator table.
This type is declared in WinDef.h as follows:
|
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:
| #ifdef _WIN64
typedef int HALF_PTR;
#else
typedef short HALF_PTR;
#endif |
|
HANDLE | Handle to an object.
This type is declared in WinNT.h as follows:
|
HBITMAP | Handle to a bitmap.
This type is declared in WinDef.h as follows:
|
HBRUSH | Handle to a brush.
This type is declared in WinDef.h as follows:
|
HCOLORSPACE | Handle to a color space.
This type is declared in WinDef.h as follows:
| #if(WINVER >= 0x0400)
typedef HANDLE HCOLORSPACE;
#endif |
|
HCONV | Handle to a dynamic data exchange (DDE) conversation.
This type is declared in Ddeml.h as follows:
|
HCONVLIST | Handle to a DDE conversation list.
This type is declared in Ddeml.h as follows:
| typedef HANDLE HCONVLIST; |
|
HCURSOR | Handle to a cursor.
This type is declared in WinDef.h as follows:
|
HDC | Handle to a device context (DC).
This type is declared in WinDef.h as follows:
|
HDDEDATA | Handle to DDE data.
This type is declared in Ddeml.h as follows:
|
HDESK | Handle to a desktop.
This type is declared in WinDef.h as follows:
|
HDROP | Handle to an internal drop structure.
This type is declared in ShellApi.h as follows:
|
HDWP | Handle to a deferred window position structure.
This type is declared in WinUser.h as follows:
|
HENHMETAFILE | Handle to an enhanced metafile.
This type is declared in WinDef.h as follows:
| typedef HANDLE HENHMETAFILE; |
|
HFILE | Handle to a file opened by OpenFile, not
CreateFile.
This type is declared in WinDef.h as follows:
|
HFONT | Handle to a font.
This type is declared in WinDef.h as follows:
|
HGDIOBJ | Handle to a GDI object.
This type is declared in WinDef.h as follows:
|
HGLOBAL | Handle to a global memory block.
This type is declared in WinDef.h as follows:
|
HHOOK | Handle to a hook.
This type is declared in WinDef.h as follows:
|
HICON | Handle to an icon.
This type is declared in WinDef.h as follows:
|
HINSTANCE | Handle to an instance.
This type is declared in WinDef.h as follows:
| typedef HANDLE HINSTANCE; |
|
HKEY | Handle to a registry key.
This type is declared in WinDef.h as follows:
|
HKL | Input locale identifier.
This type is declared in WinDef.h as follows:
|
HLOCAL | Handle to a local memory block.
This type is declared in WinDef.h as follows:
|
HMENU | Handle to a menu.
This type is declared in WinDef.h as follows:
|
HMETAFILE | Handle to a metafile.
This type is declared in WinDef.h as follows:
| typedef HANDLE HMETAFILE; |
|
HMODULE | Handle to a module. The value is the base address of the module.
This type is declared in WinDef.h as follows:
| typedef HINSTANCE HMODULE; |
|
HMONITOR | Handle to a display monitor.
This type is declared in WinDef.h as follows:
| if(WINVER >= 0x0500) typedef HANDLE HMONITOR; |
|
HPALETTE | Handle to a palette.
This type is declared in WinDef.h as follows:
|
HPEN | Handle to a pen.
This type is declared in WinDef.h as follows:
|
HRESULT | Return code 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 | Handle to a region.
This type is declared in WinDef.h as follows:
|
HRSRC | Handle to a resource.
This type is declared in WinDef.h as follows:
|
HSZ | Handle to a DDE string.
This type is declared in Ddeml.h as follows:
|
HWINSTA | Handle to a window station.
This type is declared in WinDef.h as follows:
|
HWND | Handle to a window.
This type is declared in WinDef.h as follows:
|
INT | 32-bit signed integer.
The range is -2147483648 through 2147483647 decimal.
This type is declared in WinDef.h as follows:
|
INT_PTR | 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:
| #if defined(_WIN64)
typedef __int64 INT_PTR;
#else
typedef int INT_PTR;
#endif |
|
INT32 | 32-bit signed integer. The range is -2147483648 through 2147483647 decimal.
This type is declared in BaseTsd.h as follows:
| typedef signed int INT32; |
|
INT64 | 64-bit signed integer.
The range is –9223372036854775808 through 9223372036854775807 decimal.
This type is declared in BaseTsd.h as follows:
| typedef signed __int64 INT64; |
|
LANGID | Language identifier. For more information, see Locales.
This type is declared in WinNT.h as follows:
|
LCID | Locale identifier. For more information, see
Locales.
This type is declared in WinNT.h as follows:
|
LCTYPE | Locale information type. For a list, see
LCTYPE Constants.
This type is declared in WinNls.h as follows:
|
LGRPID | Language group identifier. For a list, see
EnumLanguageGroupLocales.
This type is declared in WinNls.h as follows:
|
LONG | 32-bit signed integer.
The range is –2147483648 through 2147483647 decimal.
This type is declared in WinNT.h as follows:
|
LONGLONG | 64-bit signed integer.
The range is –9223372036854775808 through 9223372036854775807 decimal.
This type is declared in WinNT.h as follows:
| #if !defined(_M_IX86)
typedef __int64 LONGLONG;
#else
typedef double LONGLONG;
#endif |
|
LONG_PTR | 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:
| #if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif |
|
LONG32 | 32-bit signed integer.
The range is –2147483648 through 2147483647 decimal.
This type is declared in BaseTsd.h as follows:
| typedef signed int LONG32; |
|
LONG64 | 64-bit signed integer.
The range is –9223372036854775808 through 9223372036854775807 decimal.
This type is declared in BaseTsd.h as follows:
|
LPARAM | Message parameter.
This type is declared in WinDef.h as follows:
|
LPBOOL | Pointer to a BOOL.
This type is declared in WinDef.h as follows:
| typedef BOOL far *LPBOOL; |
|
LPBYTE | Pointer to a BYTE.
This type is declared in WinDef.h as follows:
| typedef BYTE far *LPBYTE; |
|
LPCOLORREF | Pointer to a COLORREF value.
This type is declared in WinDef.h as follows:
| typedef DWORD *LPCOLORREF; |
|
LPCSTR | 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:
| typedef __nullterminated CONST CHAR *LPCSTR; |
|
LPCTSTR | An LPCWSTR if
UNICODE is defined, an
LPCSTR otherwise.
This type is declared in WinNT.h as follows:
| #ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif |
|
LPCVOID | Pointer to a constant of any type.
This type is declared in WinDef.h as follows:
| typedef CONST void *LPCVOID; |
|
LPCWSTR | 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:
| typedef CONST WCHAR *LPCWSTR; |
|
LPDWORD | Pointer to a DWORD.
This type is declared in WinDef.h as follows:
|
LPHANDLE | Pointer to a HANDLE.
This type is declared in WinDef.h as follows:
| typedef HANDLE *LPHANDLE; |
|
LPINT | Pointer to an INT.
This type is declared in WinDef.h as follows:
|
LPLONG | Pointer to a LONG.
This type is declared in WinDef.h as follows:
|
LPSTR | 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.
This type is declared in WinNT.h as follows:
| #ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif |
|
LPVOID | Pointer to any type.
This type is declared in WinDef.h as follows:
|
LPWORD | Pointer to a WORD.
This type is declared in WinDef.h as follows:
|
LPWSTR | 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:
| typedef LONG_PTR LRESULT; |
|
PBOOL | Pointer to a BOOL.
This type is declared in WinDef.h as follows:
|
PBOOLEAN | Pointer to a BOOL.
This type is declared in WinNT.h as follows:
| typedef BOOLEAN *PBOOLEAN; |
|
PBYTE | Pointer to a BYTE.
This type is declared in WinDef.h as follows:
|
PCHAR | Pointer to a CHAR.
This type is declared in WinNT.h as follows:
|
PCSTR | 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:
| typedef CONST CHAR *PCSTR; |
|
PCTSTR | A PCWSTR if
UNICODE is defined, a
PCSTR otherwise.
This type is declared in WinNT.h as follows:
| #ifdef UNICODE
typedef LPCWSTR PCTSTR;
#else
typedef LPCSTR PCTSTR;
#endif |
|
PCWSTR | 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:
| typedef CONST WCHAR *PCWSTR; |
|
PDWORD | Pointer to a DWORD.
This type is declared in WinDef.h as follows:
|
PDWORDLONG | Pointer to a DWORDLONG.
This type is declared in WinNT.h as follows:
| typedef DWORDLONG *PDWORDLONG; |
|
PDWORD_PTR | Pointer to a DWORD_PTR.
This type is declared in BaseTsd.h as follows:
| typedef DWORD_PTR *PDWORD_PTR; |
|
PDWORD32 | Pointer to a DWORD32.
This type is declared in BaseTsd.h as follows:
| typedef DWORD32 *PDWORD32; |
|
PDWORD64 | Pointer to a DWORD64.
This type is declared in BaseTsd.h as follows:
| typedef DWORD64 *PDWORD64; |
|
PFLOAT | Pointer to a FLOAT.
This type is declared in WinDef.h as follows:
|
PHALF_PTR | Pointer to a HALF_PTR.
This type is declared in Basetsd.h as follows:
| #ifdef _WIN64
typedef HALF_PTR *PHALF_PTR;
#else
typedef HALF_PTR *PHALF_PTR;
#endif |
|
PHANDLE | Pointer to a HANDLE.
This type is declared in WinNT.h as follows:
|
PHKEY | Pointer to an HKEY.
This type is declared in WinDef.h as follows:
|
PINT | Pointer to an INT.
This type is declared in WinDef.h as follows:
|
PINT_PTR | Pointer to an INT_PTR.
This type is declared in BaseTsd.h as follows:
| typedef INT_PTR *PINT_PTR; |
|
PINT32 | Pointer to an INT32.
This type is declared in BaseTsd.h as follows:
|
PINT64 | Pointer to an INT64.
This type is declared in BaseTsd.h as follows:
|
PLCID | Pointer to an LCID.
This type is declared in WinNT.h as follows:
|
PLONG | Pointer to a LONG.
This type is declared in WinNT.h as follows:
|
PLONGLONG | Pointer to a LONGLONG.
This type is declared in WinNT.h as follows:
| typedef LONGLONG *PLONGLONG; |
|
PLONG_PTR | Pointer to a LONG_PTR.
This type is declared in BaseTsd.h as follows:
| typedef LONG_PTR *PLONG_PTR; |
|
PLONG32 | Pointer to a LONG32.
This type is declared in BaseTsd.h as follows:
|
PLONG64 | Pointer to a LONG64.
This type is declared in BaseTsd.h as follows:
|
POINTER_32 | 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:
| #if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif |
|
POINTER_64 | 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:
| #if (_MSC_VER >= 1300)
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif |
|
POINTER_SIGNED | A signed pointer.
This type is declared in BaseTsd.h as follows:
| #define POINTER_SIGNED __sptr |
|
POINTER_UNSIGNED | An unsigned pointer.
This type is declared in BaseTsd.h as follows:
| #define POINTER_UNSIGNED __uptr |
|
PSHORT | Pointer to a SHORT.
This type is declared in WinNT.h as follows:
|
PSIZE_T | Pointer to a SIZE_T.
This type is declared in BaseTsd.h as follows:
|
PSSIZE_T | Pointer to a SSIZE_T.
This type is declared in BaseTsd.h as follows:
| typedef SSIZE_T *PSSIZE_T; |
|
PSTR | 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 | Pointer to a TBYTE.
This type is declared in WinNT.h as follows:
|
PTCHAR | Pointer to a TCHAR.
This type is declared in WinNT.h as follows:
|
PTSTR | A PWSTR if
UNICODE is defined, a
PSTR otherwise.
This type is declared in WinNT.h as follows:
| #ifdef UNICODE
typedef LPWSTR PTSTR;
#else typedef LPSTR PTSTR;
#endif |
|
PUCHAR | Pointer to a UCHAR.
This type is declared in WinDef.h as follows:
|
PUHALF_PTR | Pointer to a UHALF_PTR.
This type is declared in Basetsd.h as follows:
| #ifdef _WIN64
typedef UHALF_PTR *PUHALF_PTR;
#else
typedef UHALF_PTR *PUHALF_PTR;
#endif |
|
PUINT | Pointer to a UINT.
This type is declared in WinDef.h as follows:
|
PUINT_PTR | Pointer to a UINT_PTR.
This type is declared in BaseTsd.h as follows:
| typedef UINT_PTR *PUINT_PTR; |
|
PUINT32 | Pointer to a UINT32.
This type is declared in BaseTsd.h as follows:
|
PUINT64 | Pointer to a UINT64.
This type is declared in BaseTsd.h as follows:
|
PULONG | Pointer to a ULONG.
This type is declared in WinDef.h as follows:
|
PULONGLONG | Pointer to a ULONGLONG.
This type is declared in WinDef.h as follows:
| typedef ULONGLONG *PULONGLONG; |
|
PULONG_PTR | Pointer to a ULONG_PTR.
This type is declared in BaseTsd.h as follows:
| typedef ULONG_PTR *PULONG_PTR; |
|
PULONG32 | Pointer to a ULONG32.
This type is declared in BaseTsd.h as follows:
| typedef ULONG32 *PULONG32; |
|
PULONG64 | Pointer to a ULONG64.
This type is declared in BaseTsd.h as follows:
|