C#调用dll动态联接库参数对照
最近公司的项目中越来越多的用到了串口设备,很多设备商家提供了二次开发包,多是用C,C++封装的dll的动态联接库。用C#进行调用的时间有关参数方面遇到了不少的困难。所以为了方便在这里我做一下我用的一些函数传参类型的整理
//C++函数原形:
int ReadID15693(HANDLE hComm, int nAddr, BOOL bIsMultiTag, unsigned char *ucDataID, int* nIDCnt);
//C# 封装写法
[DllImport("LHR900.dll")]
public static extern int ReadID15693(int hComm, int nAddr, bool bIsMultiTag, byte[] ucDataID, int nIDCnt);
C# 数据类型
//C++函数原形:
int ReadID15693(HANDLE hComm, int nAddr, BOOL bIsMultiTag, unsigned char *ucDataID, int* nIDCnt);
//C# 封装写法
[DllImport("LHR900.dll")]
public static extern int ReadID15693(int hComm, int nAddr, bool bIsMultiTag, byte[] ucDataID, int nIDCnt);|
API与C#的数据类型对应关系表 | |||||
| API数据类型 | 类型描述 | C#类型 | API数据类型 | 类型描述 | C#类型 |
| WORD | 16位无符号整数 | ushort | CHAR | 字符 | char |
| LONG | 32位无符号整数 | int | DWORDLONG | 64位长整数 | long |
| DWORD | 32位无符号整数 | uint | HDC | 设备描述表句柄 | int |
| HANDLE | 句柄,32位整数 | int | HGDIOBJ | GDI对象句柄 | int |
| UINT | 32位无符号整数 | uint | HINSTANCE | 实例句柄 | int |
| BOOL | 32位布尔型整数 | bool | HWM | 窗口句柄 | int |
| LPSTR | 指向字符的32位指针 | string | HPARAM | 32位消息参数 | int |
| LPCSTR | 指向常字符的32位指针 | String | LPARAM | 32位消息参数 | int |
| BYTE | 字节 | byte | WPARAM | 32位消息参数 | int |
C# 数据类型
|
简单类型 |
描 述 |
示 例 |
| sbyte | 8-bit 有符号整数 | sbyte val = 12; |
| short | 16-bit 有符号整数 | short val = 12; |
| int | 32-bit有符号整数 | int val = 12; |
| long | 64-bit有符号整数 | long val1 = 12; long val2 = 34L; |
| byte | 8-bit无符号整数 | byte val1 = 12; byte val2 = 34U; |
| ushort | 16-bit 无符号整数 | ushort val1 = 12; ushort val2 = 34U; |
| uint | 32-bit 无符号整数 | uint val1 = 12; uint val2 = 34U; |
| ulong | 64-bit 无符号整数 | ulong val1 = 12; ulong val2 = 34U; ulong val3 = 56L; ulong val4=78UL; |
| float | 32-bit单精度浮点数 | float val = 1.23F; |
| double | 64-bit双精度浮点数 | double val1 = 1.23; double val2 = 4.56D; |
| bool | 布尔类型 | bool val1 = true; bool val2 = false; |
| char | 字符类型 ,Unicode编码 | char val = 'h'; |
| decimal | 28个有效数字的128-bit十进制类型 | decimal val = 1.23M; |

浙公网安备 33010602011771号