C#中调用Windows API时的数据类型对应关系

简介: 原文 C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32   BOOLEAN=System.Int32   BYTE=System.UInt16   CHAR=System.

原文 C#中调用Windows API时的数据类型对应关系

BOOL=System.Int32  

BOOLEAN=System.Int32  

BYTE=System.UInt16  

CHAR=System.Int16  

COLORREF=System.UInt32  

DWORD=System.UInt32  

DWORD32=System.UInt32  

DWORD64=System.UInt64  

FLOAT=System.Float  

HACCEL=System.IntPtr  

HANDLE=System.IntPtr  

HBITMAP=System.IntPtr  

HBRUSH=System.IntPtr  

HCONV=System.IntPtr  

HCONVLIST=System.IntPtr  

HCURSOR=System.IntPtr  

HDC=System.IntPtr  

HDDEDATA=System.IntPtr  

HDESK=System.IntPtr  

HDROP=System.IntPtr  

HDWP=System.IntPtr  

HENHMETAFILE=System.IntPtr  

HFILE=System.IntPtr  

HFONT=System.IntPtr  

HGDIOBJ=System.IntPtr  

HGLOBAL=System.IntPtr  

HHOOK=System.IntPtr  

HICON=System.IntPtr  

HIMAGELIST=System.IntPtr  

HIMC=System.IntPtr  

HINSTANCE=System.IntPtr  

HKEY=System.IntPtr  

HLOCAL=System.IntPtr  

HMENU=System.IntPtr  

HMETAFILE=System.IntPtr  

HMODULE=System.IntPtr  

HMONITOR=System.IntPtr  

HPALETTE=System.IntPtr

 HPEN=System.IntPtr  

HRGN=System.IntPtr  

HRSRC=System.IntPtr  

HSZ=System.IntPtr  

HWINSTA=System.IntPtr  

HWND=System.IntPtr  

INT=System.Int32  

INT32=System.Int32  

INT64=System.Int64  

LONG=System.Int32  

LONG32=System.Int32  

LONG64=System.Int64  

LONGLONG=System.Int64  

LPARAM=System.IntPtr

 LPBOOL=System.Int16[]  

LPBYTE=System.UInt16[]  

LPCOLORREF=System.UInt32[]  

LPCSTR=System.String  

LPCTSTR=System.String  

LPCVOID=System.UInt32

 LPCWSTR=System.String  

LPDWORD=System.UInt32[]  

LPHANDLE=System.UInt32  

LPINT=System.Int32[]  

LPLONG=System.Int32[]  

LPSTR=System.String  

LPTSTR=System.String  

LPVOID=System.UInt32  

LPWORD=System.Int32[]  

LPWSTR=System.String  

LRESULT=System.IntPtr  

PBOOL=System.Int16[]  

PBOOLEAN=System.Int16[]  

PBYTE=System.UInt16[]  

PCHAR=System.Char[]  

PCSTR=System.String  

PCTSTR=System.String  

PCWCH=System.UInt32  

PCWSTR=System.UInt32  

PDWORD=System.Int32[]  

PFLOAT=System.Float[]  

PHANDLE=System.UInt32  

PHKEY=System.UInt32  

PINT=System.Int32[]  

PLCID=System.UInt32  

PLONG=System.Int32[]  

PLUID=System.UInt32  

PSHORT=System.Int16[]  

PSTR=System.String  

PTBYTE=System.Char[]  

PTCHAR=System.Char[]  

PTSTR=System.String  

PUCHAR=System.Char[]  

PUINT=System.UInt32[]

 PULONG=System.UInt32[]  

PUSHORT=System.UInt16[]  

PVOID=System.UInt32  

PWCHAR=System.Char[]  

PWORD=System.Int16[]  

PWSTR=System.String  

REGSAM=System.UInt32  

SC_HANDLE=System.IntPtr  

SC_LOCK=System.IntPtr  

SHORT=System.Int16  

SIZE_T=System.UInt32  

SSIZE_=System.UInt32  

TBYTE=System.Char  

TCHAR=System.Char  

UCHAR=System.Byte  

UINT=System.UInt32  

UINT32=System.UInt32  

UINT64=System.UInt64  

ULONG=System.UInt32  

ULONG32=System.UInt32  

ULONG64=System.UInt64  

ULONGLONG=System.UInt64  

USHORT=System.UInt16  

WORD=System.UInt16  

WPARAM=System.IntPtr  

 

C++            C#
=====================================
WORD              ushort
DWORD             uint
UCHAR             int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte 
UCHAR*            string/IntPtr
unsigned char*    [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char*             string/StringBuilder
LPCTSTR           string
LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] string
long              int
ulong             uint
Handle            IntPtr
HWND              IntPtr
void*             IntPtr
int               int
int*              ref int
*int              IntPtr
unsigned int      uint
COLORREF          uint

 

附:举一个声明API的例子  

[ DllImport( "Kernel32.dll" )]

 public static extern System.UInt32 VirtualAllocEx(

 System.IntPtr hProcess,  

System.UInt32 lpAddress,  

System.UInt32 dwSize,  

System.UInt32 flAllocationType,  

System.UInt32 flProtect

 );

 

转:http://www.cnblogs.com/ausoldier/archive/2007/12/07/986141.html

 

 

Wtypes.h 中的非托管类型 非托管 C 语言类型 托管类名 说明

HANDLE

void*

System.IntPtr

在 32 位 Windows 操作系统上为 32 位,在 64 位 Windows 操作系统上为 64 位。

BYTE

unsigned char

System.Byte

8 位

SHORT

short

System.Int16

16 位

WORD

unsigned short

System.UInt16

16 位

INT

int

System.Int32

32 位

UINT

unsigned int

System.UInt32

32 位

LONG

long

System.Int32

32 位

BOOL

long

System.Int32

32 位

DWORD

unsigned long

System.UInt32

32 位

ULONG

unsigned long

System.UInt32

32 位

CHAR

char

System.Char

用 ANSI 修饰。

LPSTR

char*

System.String 或 System.Text.StringBuilder

用 ANSI 修饰。

LPCSTR

Const char*

System.String 或 System.Text.StringBuilder

用 ANSI 修饰。

LPWSTR

wchar_t*

System.String 或 System.Text.StringBuilder

用 Unicode 修饰。

LPCWSTR

Const wchar_t*

System.String 或 System.Text.StringBuilder

用 Unicode 修饰。

FLOAT

Float

System.Single

32 位

DOUBLE

Double

System.Double

64 位

目录
相关文章
|
5月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
5月前
|
存储 C#
C#数据类型之结构体介绍
C#数据类型之结构体介绍
|
5月前
|
Java 数据库 C#
C#winforms实现windows窗体人脸识别
C#winforms实现windows窗体人脸识别
|
5月前
|
C#
C#数据类型之枚举类型
C#数据类型之枚举类型
|
5月前
|
存储 编译器 数据处理
C#基础入门之数据类型
C#基础入门之数据类型
|
1月前
|
存储 C# 索引
C# 一分钟浅谈:变量与数据类型简介
【9月更文挑战第1天】在 C# 编程中,了解变量与数据类型至关重要。本文详细介绍了 C# 中的值类型(如整数、浮点数、布尔值等)和引用类型(如类、接口、数组、字符串)。通过示例代码展示了变量的声明与使用方法,并针对数据类型转换错误、变量未初始化及数值溢出等常见问题提供了解决方案。正确选择数据类型不仅能提升程序性能,还可避免潜在错误,有助于编写高质量代码。
119 47
|
7天前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
28天前
|
关系型数据库 数据库 PostgreSQL
在C#中获取与设置Windows的字符编码方式
通过以上步骤,你可以在Docker环境下有效地重启PostgreSQL服务。这对于维护数据库健康、应用更新或环境配置更改后确保数据库服务正常运行至关重要。根据你的具体需求和环境设置,选择合适的方法来执行重启操作。
11 0
|
2月前
|
C# Windows
C# 创建 Windows Service 项目
C# 创建 Windows Service 项目
32 1
|
2月前
|
开发框架 人工智能 自然语言处理
基于ChatGPT的API的C#接入研究
基于ChatGPT的API的C#接入研究
下一篇
无影云桌面