Безымянный указатель на структуру - C#

Узнай цену своей работы

Формулировка задачи:

Есть необходимость передавать в метод параметр ссылочного типа
void METOD(ref void data)
или
void METOD(ref ValueType data)
но вся проблема в том что в методе его необходимо закрепить оператором fixed
void METOD(ref ValueType data)
{
      fixed(ValueType* ptr = &data)
      {
          //передача в неуправляемую библиотеку
      }
}
но увы как всегда не всё складывается как хотелось бы. В метод будет передаваться только первый элемент массива структур.
struct Data
{
   public Single;
   public Single;
}
Data[] ARR = new Data[10];
 
METOD(ref ARR[0])
но первым в структуре может быть и не Single, а например byte, если бы в структуре первым был всегда один и тот же базовый тип, то ссылку на него получить легко void METOD(ref Single data) и это работает, проблема как раз в том что нужно чтоб метод принимал параметр любого базового типа, не зная что за тип на самом деле. Ну как то так в двух словах, помогите кто может!!
Перегрузку метода не предлагать.

Решение задачи: «Безымянный указатель на структуру»

textual
Листинг программы
    [StructLayout(LayoutKind.Explicit)]
    public struct tioController
    {
        [FieldOffset(0)]        public Byte[] All;
 
        [FieldOffset(0)]        public UInt16 Pwd;
        [FieldOffset(2)]        public UInt16 NOb;
        [FieldOffset(4)]        public UInt32 Tim;
        [FieldOffset(8)]        public UInt16 Xco;
        [FieldOffset(12)]        public UInt16 Yco;
        [FieldOffset(16)]        public Byte InP;
        [FieldOffset(17)]        public Byte Out;
        [FieldOffset(18)]        public UInt16 An0;
        [FieldOffset(20)]        public UInt16 An1;
        [FieldOffset(22)]        public UInt16 An2;
        [FieldOffset(24)]        public UInt16 Cn1;
        [FieldOffset(26)]        public UInt16 Cn2;
        [FieldOffset(28)]        public UInt16 Cn3;
        [FieldOffset(30)]        public UInt16 Cn4;
        [FieldOffset(32)]        public UInt16 An3;
        [FieldOffset(34)]        public UInt16 CSp;
        [FieldOffset(36)]        public UInt16 MSp;
        [FieldOffset(38)]        public Byte Sta;
        [FieldOffset(39)]        public Byte Mod;
        [FieldOffset(40)]        public UInt16 Cou;
        [FieldOffset(42)]        public UInt16 Se2;
        [FieldOffset(44)]        public UInt16 Se3;
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы