如题:我有一个和要调用C++动态库里的结构相匹配的C#里的结构,在C#调用时出现上面的错误,结构如下:[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Size = 28)]
     struct ReportInfo
    {
        [FieldOffset(0)]
        public int iDate; // YYYYMMDD (年月日)
        [FieldOffset(0)]
        public int iTime; // HHMMSSMSS (时分秒毫秒)
        //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24), FieldOffset(17)]
        [FieldOffset(17)]
        public char[] cMdlName;//[24];
        [FieldOffset(41)]
        public int iActionCode;
        [FieldOffset(43)]
        public char ucValue;
        [FieldOffset(45)]
        public int iFaultNo;  
        [FieldOffset(50)]
        public char[] cReportDesc;//[128]; 
    };

解决方案 »

  1.   

    是不是[FieldOffset(17)]的问题 内存被占用我不懂 帮你顶
      

  2.   

    你这儿定义
    [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Size = 28)]
    大小是28,
    FieldOffset(50)]
    怎么后面最大偏移都50了,不太对吧
      

  3.   

    [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Size = 28)]
      struct ReportInfo
      {
      [FieldOffset(0)]
      public int iDate; // YYYYMMDD (年月日)
      [FieldOffset(0)]
      public int iTime; // HHMMSSMSS (时分秒毫秒)
      //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24), FieldOffset(17)]
      [FieldOffset(17)]
      public char[] cMdlName;//[24]; 
      [FieldOffset(41)]
      public int iActionCode; 
      [FieldOffset(43)]
      public char ucValue; 
      [FieldOffset(45)]
      public int iFaultNo; 
      [FieldOffset(50)]
      public char[] cReportDesc;//[128];  
      };
      

  4.   

    struct ReportInfo
      {
        int iDate; // YYYYMMDD (年月日)
        int iTime; // HHMMSSMSS (时分秒毫秒)
        char cMdlName[24]; 
        int iActionCode; 
        unsigned char ucValue; 
        int iFaultNo; 
        char  cReportDesc[128];  
      };
    上面是C++里的结构原型
      

  5.   

        [StructLayout(LayoutKind.Explicit,CharSet=CharSet.Ansi, Size = 168)]
        struct ReportInfo
        {
            [FieldOffset(0)]
            public int iDate; // YYYYMMDD (年月日)
            [FieldOffset(4)]
            public int iTime; // HHMMSSMSS (时分秒毫秒)
            [FieldOffset(8)]
            public string cMdlName;//[24]; 
            [FieldOffset(32)]
            public int iActionCode;
            [FieldOffset(36)]
            public byte ucValue;
            [FieldOffset(37)]
            public int iFaultNo;
            [FieldOffset(41)]
            public string cReportDesc;//[128];  
        }不确定在c++里是不是这样的布局,因为c++也是会对齐的,有些一个字节的字段会变成占4字节的