Platform Invoke Data Types

The following table lists data types used in the Win32 API (listed in Wtypes.h) and C-style functions. Many unmanaged libraries contain functions that pass these data types as parameters and return values. The third column lists the corresponding .NET Framework built-in value type or class that you use in managed code. In some cases, you can substitute a type of the same size for the type listed in the table.

Unmanaged type in Wtypes.h Unmanaged C language type Managed class name Description
HANDLE void* System.IntPtr 32 bits
BYTE unsigned char System.Byte 8 bits
SHORT short System.Int16 16 bits
WORD unsigned short System.UInt16 16 bits
INT int System.Int32 32 bits
UINT unsigned int System.UInt32 32 bits
LONG long System.Int32 32 bits
BOOL long System.Int32 32 bits
DWORD unsigned long System.UInt32 32 bits
ULONG unsigned long System.UInt32 32 bits
CHAR char System.Char Decorate with ANSI.
LPSTR char* System.String or System.StringBuilder Decorate with ANSI.
LPCSTR Const char* System.String or System.StringBuilder Decorate with ANSI.
LPWSTR wchar_t* System.String or System.StringBuilder Decorate with Unicode.
LPCWSTR Const wchar_t* System.String or System.StringBuilder Decorate with Unicode.
FLOAT Float System.Single 32 bits
DOUBLE Double System.Double 64 bits

For corresponding types in Visual Basic .NET, C#, and the Managed Extensions for C++, see the Introduction to the .NET Framework Class Library.

See Also

Marshaling Data with Platform Invoke | Marshaling Strings | Marshaling Classes, Structures, and Unions | Marshaling Arrays of Types | Miscellaneous Marshaling Samples