C#与C++之间类型的对应
| 
 Windows Data Type  | 
 .NET Data Type  | 
| 
 BOOL, BOOLEAN  | 
 Boolean or Int32  | 
| 
 BSTR  | 
 String  | 
| 
 BYTE  | 
 Byte  | 
| 
 CHAR  | 
 Char  | 
| 
 DOUBLE  | 
 Double  | 
| 
 DWORD  | 
 Int32 or UInt32  | 
| 
 FLOAT  | 
 Single  | 
| 
 HANDLE (and all other handle types, such as HFONT and HMENU)  | 
 IntPtr, UintPtr or HandleRef  | 
| 
 HRESULT  | 
 Int32 or UInt32  | 
| 
 INT  | 
 Int32  | 
| 
 LANGID  | 
 Int16 or UInt16  | 
| 
 LCID  | 
 Int32 or UInt32  | 
| 
 LONG  | 
 Int32  | 
| 
 LPARAM  | 
 IntPtr, UintPtr or Object  | 
| 
 LPCSTR  | 
 String  | 
| 
 LPCTSTR  | 
 String  | 
| 
 LPCWSTR  | 
 String  | 
| 
 LPSTR  | 
 String or StringBuilder*  | 
| 
 LPTSTR  | 
 String or StringBuilder  | 
| 
 LPWSTR  | 
 String or StringBuilder  | 
| 
 LPVOID  | 
 IntPtr, UintPtr or Object  | 
| 
 LRESULT  | 
 IntPtr  | 
| 
 SAFEARRAY  | 
 .NET array type  | 
| 
 SHORT  | 
 Int16  | 
| 
 TCHAR  | 
 Char  | 
| 
 UCHAR  | 
 SByte  | 
| 
 UINT  | 
 Int32 or UInt32  | 
| 
 ULONG  | 
 Int32 or UInt32  | 
| 
 VARIANT  | 
 Object  | 
| 
 VARIANT_BOOL  | 
 Boolean  | 
| 
 WCHAR  | 
 Char  | 
| 
 WORD  | 
 Int16 or UInt16  | 
| 
 WPARAM  | 
 IntPtr, UintPtr or Object  | 
另: 在进行string转换时,需要加入前缀[MarshalAs(UnmanagedType.LPStr)]lpdword 对应于 ref int
| 
 C/C++  | 
 C#  | 
| 
 HANDLE, LPDWORD, LPVOID, void*  | 
 IntPtr  | 
| 
 LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR  | 
 String [in], StringBuilder [in, out]  | 
| 
 DWORD, unsigned long, Ulong  | 
 UInt32, [MarshalAs(UnmanagedType.U4)]  | 
| 
 bool  | 
 bool  | 
| 
 LP<struct>  | 
 [In] ref <struct>  | 
| 
 SIZE_T  | 
 uint  | 
| 
 LPDWORD  | 
 out uint  | 
| 
 LPTSTR  | 
 [Out] StringBuilder  | 
| 
 PULARGE_INTEGER  | 
 out ulong  | 
| 
 WORD  | 
 uInt16  | 
| 
 Byte, unsigned char  | 
 byte  | 
| 
 Short  | 
 Int16  | 
| 
 Long, int  | 
 Int32  | 
| 
 float  | 
 single  | 
| 
 double  | 
 double  | 
| 
 NULL pointer  | 
 IntPtr.Zero  | 
| 
 Uint  | 
 Uint32  | 
C#调用DLL文件时参数对应表
Wtypes.h中的非托管类型  非托管 C语言类型        托管类名                说明 
HANDLE           void*                     System.IntPtr                 32 位 
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.StringBuilder   用 ANSI 修饰。 
LPCSTR            Const char*        System.String 或System.StringBuilder   用 ANSI 修饰。 
LPWSTR            wchar_t*           System.String 或System.StringBuilder   用 Unicode 修饰。 
LPCWSTR           Const wchar_t*     System.String 或System.StringBuilder   用 Unicode 修饰。 
FLOAT              Float             System.Single                       32 位 
DOUBLE             Double            System.Double                       64 位
习惯用C#写东西,但平时又会碰到很多要用win32 API的地方,所以经常要用DllImport,但win32函数的类型写法是很庞杂的,相信为之困扰的不止我一个,现在我整理一份我个人的理解如下,希望高人不吝赐教。
我的基本原则有如下几点:
1、下面都是针对32位系统的,所以int是32位.long也是32位;
2、各种句柄类的(H开头),我认为一律是System.IntPtr,到目前为止没发现出错;如果哪位在使用中出错,请指出;
3、LP和P,我实在不懂(对C 不太了解),对于LP和P开头的函数,如果是和STR有关的,一律写为System.String,像PLCID这样指向什么东西的,写为System.UInt32(因为指向另一个地址,那就是指针,指针是32位吧),int之类的数值型,那我就写为int[],以方便.net程序引用(写成System.UInt32的话,给API调用应该也不会出错,但.net程序就不好引用了)
如有意见,欢迎指教。谢谢
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.
| 
 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 位  | 
C#与C++之间类型的对应的更多相关文章
- (转)C#与C++之间类型的对应
		
C#与C++之间类型的对应 Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte ...
 - Go语言string,int,int64 ,float之间类型转换方法
		
(1)int转string ? 1 2 s := strconv.Itoa(i) 等价于s := strconv.FormatInt(int64(i), 10) (2)int64转string ? 1 ...
 - C/C++与C#之间类型的对应
		
最近在研究pos打印机相关功能, 调用winapi以及跨进程通信等,都涉及到类型之间的转换. C/C++ C# HANDLE, LPDWORD, LPVOID, void* IntPtr LPCTST ...
 - C#与C++之间类型的对应{转}
		
Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR ...
 - [转]Go语言string,int,int64 ,float之间类型转换方法
		
1 正文 (1)int转string s := strconv.Itoa(i) 等价于s := strconv.FormatInt(int64(i), 10) (2)int64转string i := ...
 - C#与C++之间类型对应关系
		
//C++中的DLL函数原型为 //extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned c ...
 - 【opencv基础】opencv和dlib库中rectangle类型之间的转换
		
前言 最近使用dlib库的同时也会用到opencv,特别是由于对dlib库的画图函数不熟悉,都想着转换到opencv进行show.本文介绍一下两种开源库中rectangle类型之间的转换. 类型说明 ...
 - Oracle中的数据类型和数据类型之间的转换
		
Oracle中的数据类型 /* ORACLE 中的数据类型: char 长度固定 范围:1-2000 VARCHAR2 长度可变 范围:1-4000 LONG 长度可变 最大的范围2gb 长字符类型 ...
 - 浩哥解析MyBatis源码(十)——Type类型模块之类型处理器
		
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6715063.html 1.回顾 之前的两篇分别解析了类型别名注册器和类型处理器注册器,此二 ...
 
随机推荐
- 【转载】PHP.INI配置:Session配置详细说明教程
			
网上有很多PHP.INI文件配置的中文说明,但是对于PHP初学者来说在进行PHP运行环境搭建配置时还是容易一头雾水,今天换一种角度来分享如何进行php.ini配置,以求达到解决实际问题的效果,开篇以P ...
 - jquery中html()、text()、val()的区别与使用
			
.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值. .html(),.text(),.val()三种方法都 ...
 - 【erlang】执行linux命令的两种方法
			
os.cmd(Cmd) os模块提供了cmd函数可以执行linux系统shell命令(也可以执行windows命令).返回一个Cmd命令的标准输出字符串结果.例如在linux系统中执行os:cmd(& ...
 - grunt-replace和grunt-include-replace问题
			
关于最近在做的项目要用到的grunt-replace和grunt-include-replace,百度上很多将grunt的压缩合并的教程,可是很少讲关于这两个插件的教程,不过官网上有教程,我就是按照官 ...
 - Model层数据验证
			
问题1:View层如何向Controller的Action传递Model数据?在View中,可以使用Form表单进行模型数据的提交,同样的,我们需要关联提交数据的类型,则需要在View中使用@mode ...
 - codeforces 425C
			
题意:给定长度为n,m<=100000的范围在100000以内的数组a,b. 现在给定两种操作: 第一种是ai,bj相等,ai,bj之前的数全删掉,费用为e,收益为1 第二种是把剩下的全部删掉, ...
 - 替换系统数据库解决SQLSERVER服务启动不了的问题
			
替换系统数据库解决SQLSERVER服务启动不了的问题 当遇到SQLSERVER服务启动不起来的时候,我们试过把系统的四个数据库master ,model ,tempdb,msdb 替换掉,Windo ...
 - Asp.Net Web API 2第十二课——Media Formatters媒体格式化器
			
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程演示如何在ASP.N ...
 - SRS用列建模
			
基本规则: 五子棋是两个人之间进行的竞技活动,由于对黑方白方 规则不同,黑棋必须先行.五子棋专用盘为 15×15 , 五连子的方向为横.竖.斜. 禁手是对局中被判为负的行棋手段.白棋无禁手. 在棋盘上 ...
 - Mac 快捷键整理
			
Mac 快捷键整理 文本编辑 适用于文本编辑器,浏览器等 跳到页首 cmd + ↑ 类似windows下的 ctrl + home 跳到页尾 cmd + ↓ 类似windows下的 ctrl + en ...