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

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

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

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

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

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

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


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

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

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы