Я пытаюсь выровнять класс C # с классом C ++, чтобы я мог RPM структуру в C #.Класс C ++ содержит пэд 0x10, но я не могу выровнять свой класс C # с моим классом C ++.
Класс C ++:
class Value
{
public:
char pad_0x0000[0x10]; //0x0000
float current; //0x0010
float maximum; //0x0014
};
Мой класс C #:
class Value
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)]
public byte[] pad_0x0000 = new byte[0x10]; //0x0000
public float current; //0x0010
public float maximum; //0x0014
};
Проблема в том, что всякий раз, когда я пытаюсь получить размер структуры с помощью Marshal.SizeOf, я получаю эту ошибку:
Значение не может быть маршалировано как неуправляемая структура;никакие значимые размеры или смещение не могут быть вычислены.
Я могу ошибаться.Все, что я пытаюсь сделать, это pad на 0x10, так что 2 класса выровнены
Заранее спасибо
РЕДАКТИРОВАТЬ: я последовал совету Ганса Пассанта и теперь он компилируется и работает правильно
[StructLayout(LayoutKind.Sequential)]
class Value
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)]
public byte[] pad_0x0000 = new byte[0x10]; //0x0000
public float current; //0x0010
public float maximum; //0x0014
};
но значение тока по-прежнему неверно, что означает, что они не выровнены правильно.Поэтому мой вопрос сейчас таков: не является ли
char pad_0x0000[0x10]; //0x0000
того же размера, что и этот
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)]
public byte[] pad_0x0000 = new byte[0x10]; //0x0000
И если нет, то как мне получить эквивалент панели C ++ в c #