C#与C++结构体的对应
来源:互联网 发布:软件开发与数据库设计 编辑:程序博客网 时间:2024/06/15 15:22
问题: 使用C#调用一个非托管的VC++的Dll,参数中包含一个结构体指针,C#如何与其对应?
该Dll导出接口:
BOOL GetLocalInfo(PLOCALINFO pLocalInfo);
其中,关于PLOCALINFO, 是这样定义的:
//C++的结构体,用此结构存储本地信息typedef struct _Local_Info {char chMainMac[80]; //主Mac地址char chHostName[80]; //主机名char chIpAddress[80]; //IP地址}LOCALINFO, *PLOCALINFO;
在C#中,需要定义同样的结构用接收返回的本地信息.
//C#中对应的结构, 存储本地信息的结构体,该结构体用于接收参数中的返回值[StructLayout( LayoutKind.Sequential,Pack=1)]public struct LOCALINFO{ [MarshalAs( UnmanagedType.ByValTStr,SizeConst=80)] public string chMainMac; //主Mac地址 [MarshalAs( UnmanagedType.ByValTStr,SizeConst=80)] public string chHostName; //主机名 [MarshalAs(UnmanagedType .ByValTStr,SizeConst=80)] public string chIpAddress; //IP地址}
另外, 在传递参数时,原C++接口为一个结构体的指针, 而C#中没有指针的概念, 可以使用ref关键字传入引用结构体. 如下
LOCALINFO localInfo = new LOCALINFO();//注意这里传的是结构体的引用getLocalInfo(ref localInfo);
总结, 主要以下关键点:
(1)C++/C#中结构体及变量的对应, 特别是C++中char[]与C#中如何对应.
(2)C#调用非托管类型dll时, 对于指针类型参数如何构造和传递: 使用ref关键字传入引用对象即可.
(3)运行时无问题,发现非托管接口处调试时出现异常,提示大约是声明不一致类信息,在非托管接口处加上WINAPI声明后问题解决.
- C#与C++结构体的对应
- C#中如何定义与C++定义的对应的结构体
- c、c++、c# 结构体与类的区别
- Oracle的Numer类型与C,C#数据类型对应关系
- C#与C++和C语言之间数据类型的对应
- Oracle的Numer类型与C,C#数据类型对应关系
- C#与C++和C语言之间数据类型的对应
- C#与C++STL的容器对应说明
- C#与C/C++数据类型对应关系
- c与c#数据类型对应关系
- OpenCV中的结构体、类与EmguCV的对应表
- OpenCV中的结构体、类与EmguCV的对应表
- C#调用C++dll,C++中char*与C#类型的对应关系
- 【C#】C# 结构体
- C#调用C++DLL的类型对应
- C#与C++之间类型的对应
- C#与C++之间类型的对应
- C#与C++之间类型的对应
- 局域网SOCKET通信(TCP)需要心跳包来保持长连接么
- Spring引用外部文件生成主键配置
- [转]大网站都用什么操作系统与 Web 服务器 ?
- JQuery常用方法一览
- 指定用户名登录mysql
- C#与C++结构体的对应
- OpenGL纹理-12.5、纹理坐标
- Cron表达式详解
- 让SQL自动增长的ID号从1开始
- 手机端与服务器加密方式介绍
- Delphi ListView基本用法大全
- goto语句
- Servlet&JSP的那些事儿(二十一)
- 教你一招,让你电脑右下角显示你或你爱人的名字!