Замена структуры на класс при использовании маршалинга - C#

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

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

Здравствуйте. Есть структура с массивами, которая отправляется маршалируемой функции (в C++ код) через указатель. Например, такая:
[StructLayout(LayoutKind.Sequential)]
public struct AsyncParams
{
      // ...
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
      public uint[] Chn;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
      public uint[] Data;
      // ...
}
Узнал, что массивы Chn, Data или любой другой, по умолчанию, не заполняются. В самой структуре куча таких массивов и заполнять нужно только некоторые, а остальные пускай будут заполнены нулями. Однако, конструктор структуры по умолчанию не создает массивы и не заполняет их. Более того, нельзя переопределить конструктор структуры по умолчанию (без аргументов), что очень печально в данном случае. У меня вот такой вопрос. Можно ли просто заменить здесь struct на class и добавить человеческий конструктор? Будет ли такой класс маршалироваться так же как структура? Я пробовал так делать и, вроде, работает, но боюсь, что может всплыть множество подводных камней. Тем более, что функция маршалируемая требует структуру на вход. Хотя, на самом деле, функции отдается только указатель на область памяти, которая предварительно выделяется через Marshal.AllocHGlobal и заполняется структурой/классом. Извиняюсь, за сумбурность, время позднее.

Решение задачи: «Замена структуры на класс при использовании маршалинга»

textual
Листинг программы
[StructLayout(LayoutKind.Sequential, Pack = 1)]

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


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

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

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