MarshalAs的数组的SizeConst有什么作用

发布时间:2021-10-14 11:25:28 作者:iii
来源:亿速云 阅读:313

这篇文章主要介绍“MarshalAs的数组的SizeConst有什么作用”,在日常操作中,相信很多人在MarshalAs的数组的SizeConst有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MarshalAs的数组的SizeConst有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

[StructLayout(LayoutKind.Sequential)]
        class CLS
        {
            public int id;
            public float value;
            [MarshalAs(UnmanagedType.ByValArray,SizeConst=10,ArraySubType=UnmanagedType.Struct)]
            public Point[] ps;
            [MarshalAs(UnmanagedType.LPStr)]
            public string msg;
            [MarshalAs(UnmanagedType.ByValArray,SizeConst=5,ArraySubType=UnmanagedType.LPStr)]
            public string[] msgs;
        }
 Console.WriteLine("Number of bytes needed by a CLS object:{0}", Marshal.SizeOf(typeof(CLS)));
CLS cls = new CLS();
            string[] s = new string[10];
            for (int i = 0; i < 10;i++ )
            {
                s[i] = "demo" + i;
            }
            cls.msgs = s;
            for(int i=0;i<cls.msgs.Length;i++)
            {
                Console.WriteLine(cls.msgs[i]);
            }
 Console.WriteLine("Number of bytes needed by a CLS object:{0}", Marshal.SizeOf(typeof(CLS)));

上面程序能正确执行显示:demo0....demo9。两次console.writeline大小值一样112。很不明白的地方就是:

CLS中的msgs已经定义了SizeConst=5,即数量为5个元素的数组大小,而实际代码中string[] s的大小是10个串,也就是说cls.msgs的大小也是10个字符串数组,这不冲突有问题吗???两次writeline数据一样,是不是说明实际在计算大小的时候,这个msgs的真正空间大小并没有计算在内,只计算了SizeConst*一个指向真正地址空间的指针的大小即一般来说指针大小是4个字节(本猜想可以参考https://my.oschina.net/u/2963604/blog/5013061这个实验中的“ 说明:CLS中没有msg和msgs时是88,有msg是92,有msgs是112。 ”来验证)。如果这个猜想是正确的,那我就不明白了,SizeConst=5有什么用呢?反正这个msgs是一个数组,只要知道类型是UnmanagedType.ByValArray,ArraySubType=UnmanagedType.LPSTR/LPWSTR等就可以了,没有必要知道SizeConst。不知有没有人能说得清楚。

到此,关于“MarshalAs的数组的SizeConst有什么作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. typescript的作用有哪些
  2. wordpress的作用有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

marshalas sizeconst

上一篇:CMS的Table类有什么作用

下一篇:Sqlite数据库的基本语法有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》