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.