Click to Rate and Give Feedback
MSDN
MSDN Library
Development Guides
Windows API
Windows Data Types
Windows Data Types

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.

For more information about handling 64-bit integers, see Large Integers.

TypeDescription

ATOM

Atom. For more information, see Atoms.

This type is declared in WinDef.h as follows:

typedef WORD ATOM;

BOOL

Boolean variable (should be TRUE or FALSE).

This type is declared in WinDef.h as follows:

typedef int BOOL;

BOOLEAN

Boolean variable (should be TRUE or FALSE).

This type is declared in WinNT.h as follows:

typedef BYTE BOOLEAN;

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:

typedef char CHAR;

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:

typedef DWORD COLORREF;

CONST

Variable whose value is to remain constant during execution.

This type is declared in WinDef.h as follows:

#define CONST const

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:

typedef float FLOAT;

HACCEL

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:

#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:

typedef PVOID HANDLE;

HBITMAP

Handle to a bitmap.

This type is declared in WinDef.h as follows:

typedef HANDLE HBITMAP;

HBRUSH

Handle to a brush.

This type is declared in WinDef.h as follows:

typedef HANDLE HBRUSH;

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:

typedef HANDLE HCONV;

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:

typedef HICON HCURSOR;

HDC

Handle to a device context (DC).

This type is declared in WinDef.h as follows:

typedef HANDLE HDC;

HDDEDATA

Handle to DDE data.

This type is declared in Ddeml.h as follows:

typedef HANDLE HDDEDATA;

HDESK

Handle to a desktop.

This type is declared in WinDef.h as follows:

typedef HANDLE HDESK;

HDROP

Handle to an internal drop structure.

This type is declared in ShellApi.h as follows:

typedef HANDLE HDROP;

HDWP

Handle to a deferred window position structure.

This type is declared in WinUser.h as follows:

typedef HANDLE HDWP;

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:

typedef int HFILE;

HFONT

Handle to a font.

This type is declared in WinDef.h as follows:

typedef HANDLE HFONT;

HGDIOBJ

Handle to a GDI object.

This type is declared in WinDef.h as follows:

typedef HANDLE HGDIOBJ;

HGLOBAL

Handle to a global memory block.

This type is declared in WinDef.h as follows:

typedef HANDLE HGLOBAL;

HHOOK

Handle to a hook.

This type is declared in WinDef.h as follows:

typedef HANDLE HHOOK;

HICON

Handle to an icon.

This type is declared in WinDef.h as follows:

typedef HANDLE HICON;

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:

typedef HANDLE HKEY;

HKL

Input locale identifier.

This type is declared in WinDef.h as follows:

typedef HANDLE HKL;

HLOCAL

Handle to a local memory block.

This type is declared in WinDef.h as follows:

typedef HANDLE HLOCAL;

HMENU

Handle to a menu.

This type is declared in WinDef.h as follows:

typedef HANDLE HMENU;

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:

typedef HANDLE HPALETTE;

HPEN

Handle to a pen.

This type is declared in WinDef.h as follows:

typedef HANDLE HPEN;

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:

typedef LONG HRESULT;

HRGN

Handle to a region.

This type is declared in WinDef.h as follows:

typedef HANDLE HRGN;

HRSRC

Handle to a resource.

This type is declared in WinDef.h as follows:

typedef HANDLE HRSRC;

HSZ

Handle to a DDE string.

This type is declared in Ddeml.h as follows:

typedef HANDLE HSZ;

HWINSTA

Handle to a window station.

This type is declared in WinDef.h as follows:

typedef HANDLE WINSTA;

HWND

Handle to a window.

This type is declared in WinDef.h as follows:

typedef HANDLE HWND;

INT

32-bit signed integer. The range is -2147483648 through 2147483647 decimal.

This type is declared in WinDef.h as follows:

typedef int INT;

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:

typedef WORD LANGID;

LCID

Locale identifier. For more information, see Locales.

This type is declared in WinNT.h as follows:

typedef DWORD LCID;

LCTYPE

Locale information type. For a list, see LCTYPE Constants.

This type is declared in WinNls.h as follows:

typedef DWORD LCTYPE;

LGRPID

Language group identifier. For a list, see EnumLanguageGroupLocales.

This type is declared in WinNls.h as follows:

typedef DWORD LGRPID;

LONG

32-bit signed integer. The range is –2147483648 through 2147483647 decimal.

This type is declared in WinNT.h as follows:

typedef long LONG;

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:

typedef __int64 LONG64;

LPARAM

Message parameter.

This type is declared in WinDef.h as follows:

typedef LONG_PTR LPARAM;

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:

typedef DWORD *LPDWORD;

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:

typedef int *LPINT;

LPLONG

Pointer to a LONG.

This type is declared in WinDef.h as follows:

typedef long *LPLONG;

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:

typedef CHAR *LPSTR;

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:

typedef void *LPVOID;

LPWORD

Pointer to a WORD.

This type is declared in WinDef.h as follows:

typedef WORD *LPWORD;

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:

typedef WCHAR *LPWSTR;

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:

typedef BOOL *PBOOL;

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:

typedef BYTE *PBYTE;

PCHAR

Pointer to a CHAR.

This type is declared in WinNT.h as follows:

typedef CHAR *PCHAR;

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:

typedef DWORD *PDWORD;

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:

typedef FLOAT *PFLOAT;

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:

typedef HANDLE *PHANDLE;

PHKEY

Pointer to an HKEY.

This type is declared in WinDef.h as follows:

typedef HKEY *PHKEY;

PINT

Pointer to an INT.

This type is declared in WinDef.h as follows:

typedef int *PINT;

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:

typedef INT32 *PINT32;

PINT64

Pointer to an INT64.

This type is declared in BaseTsd.h as follows:

typedef INT64 *PINT64;

PLCID

Pointer to an LCID.

This type is declared in WinNT.h as follows:

typedef PDWORD PLCID;

PLONG

Pointer to a LONG.

This type is declared in WinNT.h as follows:

typedef LONG *PLONG;

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:

typedef LONG32 *PLONG32;

PLONG64

Pointer to a LONG64.

This type is declared in BaseTsd.h as follows:

typedef LONG64 *PLONG64;

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:

typedef SHORT *PSHORT;

PSIZE_T

Pointer to a SIZE_T.

This type is declared in BaseTsd.h as follows:

typedef SIZE_T *PSIZE_T;

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:

typedef CHAR *PSTR;

PTBYTE

Pointer to a TBYTE.

This type is declared in WinNT.h as follows:

typedef TBYTE *PTBYTE;

PTCHAR

Pointer to a TCHAR.

This type is declared in WinNT.h as follows:

typedef TCHAR *PTCHAR;

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:

typedef UCHAR *PUCHAR;

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:

typedef UINT *PUINT;

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:

typedef UINT32 *PUINT32;

PUINT64

Pointer to a UINT64.

This type is declared in BaseTsd.h as follows:

typedef UINT64 *PUINT64;

PULONG

Pointer to a ULONG.

This type is declared in WinDef.h as follows:

typedef ULONG *PULONG;

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: