请问在c#中怎样对结构体中的数组清零,如c++中的中ZeroMemory命令在c#中怎样使用?谢谢

解决方案 »

  1.   

    byte[] array = new byte[100];
    array[1] = 1;
    Array.Clear(array, 0, array.Length);
    Console.Write(array[1]);
      

  2.   

    由于是结构体中的数组:
    public struct aa
      public int                         dwSize;
      [MarshalAs(UnmanagedType.ByValArray,sizeConst = 10)]
      public bb[] cc;
    }public struct bb
      public int                         dwTime;
    }现调用:
    aa dd = new aa();
    System.array.Clear(dd.cc,0,dd.cc.Length);报错:“未将对象引用设置到对象实例”不知该怎样处理?
      

  3.   

    aa dd = new aa();
    dd.cc = new bb[10];//这个要实例化
    System.array.Clear(dd.cc,0,dd.cc.Length);
      

  4.   

    [MarshalAs(UnmanagedType.ByValArray,sizeConst = 10)]
    这里只修饰了再p/invoke时候的长度。并没有实际的实例化。
      

  5.   


    不知道bb是什么意思,如果按楼主的想法,给赋值默认值为0,那估计是byte,int这类的值类型,值类型就不用再手工实例化了。
      

  6.   


    恩。对。只要实例化就可以了。.net默认赋值0.
      

  7.   

    完整代码如下:        public struct NET_DVR_MATRIX_LOOP_DECINFO
            {
                public uint dwSize;
                /// <summary>
                /// 轮巡时间
                /// </summary>
                public uint dwPoolTime;
                /// <summary>
                ///     NET_DVR_MATRIX_DECCHANINFO struchanConInfo[MAX_CYCLE_CHAN];
                /// </summary>
                [MarshalAs(UnmanagedType.ByValArray, SizeConst =HCNetSDK.MAX_CYCLE_CHAN )]
                public NET_DVR_MATRIX_DECCHANINFO[] struchanConInfo;
            }        public struct NET_DVR_MATRIX_DECCHANINFO
            {
                /// <summary>
                /// 是否启用 0-否 1-启用
                /// </summary>
                public uint dwEnable;
                /// <summary>
                /// 轮循解码通道信息
                /// </summary>
                public NET_DVR_MATRIX_DECINFO struDecChanInfo;
            }
            public struct NET_DVR_MATRIX_DECINFO
            {
                /// <summary>
                /// DVR IP地址
                ///     char  sDVRIP[16];
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
                public string sDVRIP;
                /// <summary>
                /// 端口号
                /// </summary>
                public ushort wDVRPort;
                /// <summary>
                /// 通道号
                /// </summary>
                public byte byChannel;
                /// <summary>
                /// 传输协议类型 0-TCP, 1-UDP
                /// </summary>
                public byte byTransProtocol;
                /// <summary>
                /// 传输码流模式 0-主码流 1-子码流
                /// </summary>
                public byte byTransMode;
                /// <summary>
                ///     public byte byRes[3];
                /// </summary>
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
                public byte[] byRes;
                /// <summary>
                /// 监控主机登陆帐号
                ///     public byte sUserName[NAME_LEN];
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NAME_LEN)]
                public string sUserName;
                /// <summary>
                /// 监控主机密码
                ///     public byte sPassword[PASSWD_LEN];
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PASSWD_LEN)]
                public string sPassword;
            }现调用:
                HCNetSDK.NET_DVR_MATRIX_LOOP_DECINFO lpInter = new HCNetSDK.NET_DVR_MATRIX_LOOP_DECINFO();
                System.Array.Clear(lpInter.struchanConInfo, 0, lpInter.struchanConInfo.Length);运行到System.Array.Clear时报:“未将对象引用设置到对象实例,在调用方法前通过检查确定对象是否为null”
      

  8.   

    不是上面写给你了么…
    这样修改试试
    HCNetSDK.NET_DVR_MATRIX_LOOP_DECINFO lpInter = new HCNetSDK.NET_DVR_MATRIX_LOOP_DECINFO();
    lpInter.byRes = new byte[3];不要clear了。.net默认值就是0,c++不写的时候不给默认值,.net不用。