基于C#调用c++Dll结构体数组指针的问题详解
基于C#调用C++ Dll结构体数组指针的问题详解 C#调用C++ Dll文件是一件很麻烦的事情,首先面临的是数据类型转换的问题。相信经常做C#开发的都和我一样把学校的那点C++基础都忘光了吧(语言特性类)。网上有一大堆得转换对应表,也有一大堆的转换实例,但是都没有强调一个更重要的问题,就是C#数据类型和C++数据类型占内存长度的对应关系。 如果Dll文件中只包含一些基础类型,那这个问题可能可以被忽略,但是如果是组合类型(这个叫法也许不妥),如结构体、类类型等,在其中的成员变量的长度的申明正确与否将决定你对Dll文件调用的成败。 在C++中,结构体的申明通常使用typedef关键字,例如: typedef struct { unsigned char Port; unsigned long Id; unsigned char Ctrl; unsigned char pData[8]; }HSCAN_MSG; 而在C#中,使用StructLayoutAttribute特性来申明结构体,例如: [StructLayout(LayoutKind.Sequential)] public struct HSCAN_MSG { [MarshalAs(UnmanagedType.U1)] public byte Port; [MarshalAs(UnmanagedType.U4)] public uint nId; [MarshalAs(UnmanagedType.U1)] public byte nCtrl; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] pData; }; 在C++中,函数的申明通常使用extern "C"关键字,例如: extern "C" int _stdcall HSCAN_SendCANMessage(unsigned char nDevice,unsigned char nPort,HSCAN_MSG *msg,int nLength); 而在C#中,使用DllImportAttribute特性来申明函数,例如: [DllImport("HS2106API.dll")] public static extern int HSCAN_SendCANMessage( byte nDevice, byte nPort, HSCAN_MSG[] pMsg, int nLength); 在C#中调用C++ Dll文件时,需要注意结构体数组的申明和使用。例如: HSCAN_MSG[] msg = new HSCAN_MSG[1]; for (int yy = 0; yy < msg.Length; yy++) { msg[yy] = new HSCAN_MSG(); } //...结构体中的成员的实例化略 HSCAN_SendCANMessage(0x0, 0x0, msg, 1) 在C#中,使用MarshalAsAttribute特性来申明结构体成员的类型和长度,例如: [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] pData; 在C#中,使用StructLayoutAttribute特性来申明结构体的.layouts,例如: [StructLayout(LayoutKind.Sequential)] public struct HSCAN_MSG { //... } C#调用C++ Dll文件需要注意数据类型的转换和结构体数组的申明和使用。















- 粉丝: 7
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 斐讯DC1插座固件烧录支持电量识别与MQTT无需更改模块
- PCMgr-Setup-215-6-23169-211-OGWAMR0FXX.exe
- AweSun-16.0.0.22931-x64.exe
- QQ-9.9.20-250724-x64-01.exe
- 黄河流域(shp)30m分辨率数字高程(DEM)数据
- 腾讯视频 QQliveSetup-20-847.exe
- 麒麟V10 飞腾2000平台ARM版本 Qt5.15.10 支持 QML
- 如何用代码实现判断奇偶数并输出
- Trae CN-Setup-x64-2.0.11.exe
- Xshell-8.0.0084p.exe
- Xftp-8.0.0084p.exe
- 蓝牙协议HCI查表大全
- youkuclient-setup-9.2.66.1001.exe
- PyTorch预训练词向量应用详解
- openmv的实际运用相关内容PDF


