马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

C#结构体作为函数参数的问题

  [复制链接]
查看3290 | 回复15 | 2022-6-17 16:46:00 | 显示全部楼层 |阅读模式

新鸟,如下结构体,作为函数参数:public byte msg_parse(Msg_s obj, byte data),编译时没有报错,运行时给obj.data赋值就报错:“System.NullReferenceException:“未将对象引用设置到对象的实例。””,debug发现obj.data是null。我试过这样定义,static Msg_s obj = new Msg_s();obj.data还是null,求大佬指点迷津,谢谢。

[C#] 纯文本查看 复制代码
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct Msg_s
        {
            public byte sop1;
            public byte sop2;
            public byte msg_type;
            public byte msg_id;
            public ushort length;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
            public byte[] data;
            public ushort crc;
            public byte eop1;
            public byte eop2;
        };



ibcadmin | 2022-6-17 17:45:59 | 显示全部楼层
因为你的data是byte[]数组,所以需要new一下,  obj.data = new byte[]{};
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
allegro | 2022-6-17 18:05:17 | 显示全部楼层
感谢大佬指导,这样可以了,我有个疑问,static Msg_s obj = new Msg_s();这样new整个结构体,结构体里面的数组怎么还要重新new呢?
ibcadmin | 2022-6-19 22:39:07 | 显示全部楼层
allegro 发表于 2022-6-17 18:05
感谢大佬指导,这样可以了,我有个疑问,static Msg_s obj = new Msg_s();这样new整个结构体,结构体里面的 ...

因为你里面的属性也是一个对象
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
allegro | 2022-6-21 10:57:45 | 显示全部楼层
感谢,我把嵌入式里面的C语言移到C#里面,原来没有问题的现在好多问题,看来差别挺大的。
ibcadmin | 2022-6-21 15:42:42 | 显示全部楼层
allegro 发表于 2022-6-21 10:57
感谢,我把嵌入式里面的C语言移到C#里面,原来没有问题的现在好多问题,看来差别挺大的。

是的,面向对象嘛,只要是对象 都要new
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则