Ниже приведен код, который я пытаюсь преобразовать из C++ в C#Marshalling тип данных вопрос
struct PSB {
short type_of_psb;
short call_dependent;
int32 del_psb_status;
uint32 seq_number[2];
int32 uma_psb_status;
short psb_reserved[6];
}
Ранее я писал ниже структуры.
[StructLayout(LayoutKind.Explicit)]
public struct PSB
{
[FieldOffset(0)]
public short type_of_psb;
[FieldOffset(2)]
public short call_dependent;
[FieldOffset(4)]
public int del_psb_status;
[FieldOffset(8)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public uint32 seq_number; // Here is the problem
[FieldOffset(16)]
public int uma_psb_status;
[FieldOffset(20)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public short[] psb_reserved;
}
но выше C# код не работает, проблема заключается в членах seq_number
Так я изменил его в
public ulong seq_number
из uint seq_number
, и я удалил атрибут выше MarshalAs.
Теперь он работает с устаревшим кодом. Я не знаю почему? В чем проблема, если я определил как массив?
Я не вижу, что 'seq_number' является массивом. –
не должно быть 'public uint32 [] seq_number', я предполагаю, что ulong работает, потому что он будет храниться как два последовательных ints, но у вас может быть проблема LSB ... –