如题.

解决方案 »

  1.   

    不是引用类型的变量.
        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct PackHead
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
            public byte[] IdcFlg; 
        }
    PackHead.IdcFlg = Encoding.UTF8.GetBytes("XXX");
    这样就有问题.我系统这个机构的长度,不能因为赋值而改变.
      

  2.   

    public byte[] IdcFlg;---------------------这个不是引用类型又是什么...
      

  3.   

    1.声明的时候创建数组。
    2.要赋值的时候使用Array.Copy方法。
      

  4.   

    byte[]就是引用类型。
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
    这里只是告诉托管内存管理器,和非托管互操作时,这里的长度。并不限制也不替你分配。对IdcFlg的操作不要用IdcFlg = 另一个数组而是
    Array.Copy(...)
      

  5.   

    数组的长度声明为你最大可能用到的长度,然后赋值的时候使用Array.Copy。当然,你自己应该知道真实的数据长度。