Hi,
I have some C union which are mapped on C# as below
But when PRIVATE_TRANSFE R_REQUEST structure is change to following, it is generating Type load exception
Exception:
An unhandled exception of type 'System.TypeLoa dException' occurred in Unknown Module.
Additional information: Could not load type 'xxxx.BACnetSta ckIntegration.S tructures.servi ce_choice_u' from assembly 'xxxx.BACnetSta ckIntegration, Version=1.0.11. 0, Culture=neutral , PublicKeyToken= null' because it contains an object field at offset 0 that is incorrectly aligned or overlapped by a non-object field.
I have some C union which are mapped on C# as below
Code:
[StructLayout(LayoutKind.Explicit, Pack = 4)] public struct service_choice_u { [FieldOffset(0)] public RPM_RESPONSE m_stRPM_Response; [FieldOffset(0)] public PRIVATE_TRANSFER_REQUEST pt_request; }
Code:
[B]//Structure to note[/B] [StructLayout(LayoutKind.Explicit, Pack = 4)] public struct PRIVATE_TRANSFER_REQUEST { [FieldOffset(0)] public UInt32 m_u32VendorID; [FieldOffset(4)] public UInt32 m_u32ServiceNumber; [FieldOffset(8)] public UInt32 m_u32DataLength; [B]//See offset[/B] [FieldOffset(40)] [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = StackConstants.MAX_PT_SERVICE_PARAMETER_BYTE_LENGTH)] public byte[] m_ai8ServiceParameters; [FieldOffset(140)] public byte m_bIsConfirmedRequest; [FieldOffset(141)] public byte m_bIsSerParaPresent; } [StructLayout(LayoutKind.Explicit, Pack = 4)] public struct RPM_RESPONSE { [FieldOffset(0)] public byte m_i8ArrayIndexPresent; [FieldOffset(4)] public int m_i32ErrorClass; [FieldOffset(8)] public int m_i32ErrorCode; [FieldOffset(12)] public int m_i32ObjectType; [FieldOffset(16)] public int m_i32ObjectInstance; [FieldOffset(20)] public int m_i32ObjectProperty; [FieldOffset(24)] public uint m_u32ArrayIndex; [FieldOffset(28)] public int m_eAccessType; [FieldOffset(32)] public int m_i32StringLen; [FieldOffset(36)] public int m_pi8PropValue; [FieldOffset(40)] [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 96)] public byte[] bacnet_property_value_structure; [FieldOffset(136)] public int m_pstNext; }
But when PRIVATE_TRANSFE R_REQUEST structure is change to following, it is generating Type load exception
Code:
//Structure to note [StructLayout(LayoutKind.Explicit, Pack = 4)] public struct PRIVATE_TRANSFER_REQUEST { [FieldOffset(0)] public UInt32 m_u32VendorID; [FieldOffset(4)] public UInt32 m_u32ServiceNumber; [FieldOffset(8)] public UInt32 m_u32DataLength; [B]//See offset[/B] [FieldOffset(12)] [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = StackConstants.MAX_PT_SERVICE_PARAMETER_BYTE_LENGTH)] public byte[] m_ai8ServiceParameters; [FieldOffset(112)] public byte m_bIsConfirmedRequest; [FieldOffset(113)] public byte m_bIsSerParaPresent; }
Exception:
An unhandled exception of type 'System.TypeLoa dException' occurred in Unknown Module.
Additional information: Could not load type 'xxxx.BACnetSta ckIntegration.S tructures.servi ce_choice_u' from assembly 'xxxx.BACnetSta ckIntegration, Version=1.0.11. 0, Culture=neutral , PublicKeyToken= null' because it contains an object field at offset 0 that is incorrectly aligned or overlapped by a non-object field.