马歇尔结构数组

编程入门 行业动态 更新时间:2024-10-20 13:45:17
本文介绍了马歇尔结构数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我花了很多时间寻找解决方案,但仍然找不到答案.

I've spent a lot of time to look for the solution but still don't find it out.

我有2个课程:

[StructLayout(LayoutKind.Sequential)] public class Result { public int Number; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)] public string Name; public int Size; } [StructLayout(LayoutKind.Sequential)] public class CoverObject { public int NumOfResults; [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 4)] public Result[] Results; }

我期望命令 Marshal.SizeOf(typeof(CoverObject))将返回52,但不会返回20,因此,我以后使用的所有marshall和unmarshall均无法正常工作.

My expectation that the command Marshal.SizeOf(typeof(CoverObject)) will return 52, but not, it's just 20. Thus, all of marshall and unmarshall that I use later are not working.

似乎只计算Result类中的第一个成员(数字).我做错了什么吗?

Seeming it only counts the first member (Number) in Result class. Did I do anything wrong?

推荐答案

将类更改为结构

[StructLayout(LayoutKind.Sequential)] public struct Result { public int Number; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)] public string Name; public int Size; } [StructLayout(LayoutKind.Sequential)] public struct CoverObject { public int NumOfResults; [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 4)] public Result[] Results; }

其他地方:

Marshal.SizeOf(typeof(CoverObject)) // it will return 52

更多推荐

马歇尔结构数组

本文发布于:2023-11-25 23:57:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631849.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:马歇尔   数组   结构

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!