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