基于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币余额
我的收藏
我的下载
下载帮助


最新资源
- 10.13版一站式通信营销开发话术及解决方案.doc
- LinuxONE对于Openstack的支持介绍-基本配置和功能列表.docx
- pmp模拟试题-(项目管理框架部分).docx
- 中职建筑CAD课堂教学中的信息化技术应用.docx
- Live2D-View软件的使用教程.ppt
- 移动通信系统中的切换技术研究的开题报告.docx
- (完整版)尔雅网络课程影视鉴赏(陈旭光)课后答案.doc
- 酒店网站策划方案.doc
- 2022计算机专业毕业自荐信.docx
- (完整word版)通信系统课程设计.doc
- 财务人员必须会的Excel函数大全.doc
- 互联网经济对中小企业的影响分析.docx
- python真题讲解材料.docx
- 试谈石油工程现代信息化建设.docx
- 创业基础网络课答案.doc
- 电力系统自动化第4章电力系统电压调整.ppt


