Как игнорировать размер поля в структуре с помощью Marshal.SizeOf?

2

Есть ли способ игнорировать поле в вычисляемом размере структуры, используя Marshal.SizeOf

Пример:

public struct Message
{
   public ushort X;
   public ushort Y; // Ignore this field in the calculation
}

int size = Marshal.SizeOf(typeof(Message));

Прямо сейчас размер равен 4. Я хочу, чтобы размер был равен 2. Есть ли способ сделать это?

  • 0
    Объединение было бы, если бы я явно установил смещения полей одинаковыми (у C # есть объединения), я не хочу этого делать.
  • 0
    Я думаю, вы должны объяснить, почему вы этого хотите, чтобы мы могли вам помочь. Если все, что вы хотите, это чтобы оно было "2", то почему бы не заменить его на литерал 2? Или просто передайте typeof (ushort) в вызов marshal.sizeof ().
Теги:
struct
marshalling
sizeof

2 ответа

2
Лучший ответ

Единственный способ, которым я могу это сделать, - создать Custom Marshaller и при реализации ICustomMarshaller. GetNativeDataSize, return 0. Вы использовали бы MarshalAsAttribute, чтобы применить настраиваемый маршаллер только к этому полю. Но он не будет корректно маршалироваться, поэтому я не знаю, почему вы хотели бы это сделать.

0

Я не думаю, что это возможно. Почему вы хотите это сделать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню