VB6升级到VB.net,structure怎么样修改才能得到和原来一样的长度?
在VB.net中写成一下形式:
<StructLayout(LayoutKind.Sequential)> Public Structure Info_struct
Dim gui_number As Byte
Dim Version As Byte
Dim Test_Start_Time As Date
Dim Test_Stop_Time As Date
Dim step_number As Int16
Dim cycle_number As Byte
Dim Stop_Con As Byte
Dim Station As Int16
Dim Current As Int16
Dim up_v As Int16
Dim down_v As Int16
Dim delta_v As Int16
Dim stop_current As Int16
Dim set_time As Single '设定时间
Dim end_time As Single '实际终止时间
Dim max_voltage As Int16
Dim min_voltage As Int16
Dim battery_number As Int16
Dim SubGroupNum As Int16
Dim MaxRowSubGroup As Int16
Dim MaxColGroup As Int16
Dim dat_address As MyAddress_Struct
Public cur_address() As MyAddress_Struct
Dim FangRatio As Single
Dim SepFlag As Int16
<MarshalAs(UnmanagedType.ByValArray, sizeconst:=4)>
Dim DingValue() As Int16
<MarshalAs(UnmanagedType.ByValArray, sizeconst:=MAX_BATTERY_NUM - 1)>
Dim cursep_address As MyAddress_Struct
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=18)>
Dim sign_1 As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=20)>
Dim sign_3 As String
End Structure
我试着用两种方法求它的长度的:
dim Temp_info as INfo_struct
方法1:marshal.sizeof(Temp_info)
运行时弹出错误:
未处理 System.ArgumentException
Message=类型“bat.Module1+Info_struct”不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移 量。
方法2:len(Temp_info)
返回值太小,明显是不对的。
那我应该怎么做呢?
[解决办法]
[StructLayout(LayoutKind.Sequential, Pack = 1)]