Вот мой код:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Foo
{
UInt32 StartAddr;
UInt32 Type;
}
[DllImport(DllName, EntryPoint="_MyFunc", CallingConvention = CallingConvention.Cdecl)]
static extern unsafe IntPtr MyFunc([MarshalAs(UnmanagedType.LPArray)] Foo[] Foos);
List<Foo> Foos = new List<Foo>();
Foo1 = new Foo();
Foo1.StartAddr = 1;
Foo1.Type = 2;
Foos.Add(Foo1);
MyFunc(Foos.ToArray());
В DLL на основе C я распечатываю значение Foos [0] .StartAddr и Foos [0] .Type.Это прекрасно работает.
Теперь я хочу добавить конструктор без параметров в структуру, что означает, что я должен переключиться на класс.Изменение только объявления C # со «struct» на «class» приводит к тому, что поврежденные значения передаются в DLL на основе C.
Я считаю, что это должно работать, но я предполагаю, что пропускаю шаг.Как я могу передать массив классов C # как массив структур в код C?
Спасибо!Andy